Форум программистов, компьютерный форум CyberForum.ru

Приведение к структуре - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Основы моделирования физических процессов http://www.cyberforum.ru/cpp/thread1284964.html
Здравствуйте! Я магистрант физ-теха. В "экспериментальной" части магистерской работы стоит молекулярная динамика (нужно написать программу на С++). Программирование проходили на втором курсе, но прошли мимо. Поэтому у меня вопросы: скажите, пожалуйста, можно ли в моем случае за 2 года разобраться не только с МД, но вообще с некоторой частью программирования (в области моделирования, реализации...
C++ Почему операция взятия корня такая ресурсоемкая? Здравствуйте! Просветите в вопросе. 1. Какие методы используются для его взятия? 2. Как есть пути оптимизации? Заранее спс! http://www.cyberforum.ru/cpp/thread1284785.html
C++ Процесс обучения нейросети
Добрый день. Подскажите, пожалуйста, я хочу написать нейросеть на С++. Это возможно без подключения MATLAB на чистом С++? Дело в том, что перечитав кучу литературы об их проектировании и обучении, я не могу понять куда записываются измененные веса и как они влияют на следующий входной сигнал? К примеру подается цифра пять, в следующий раз подается таже цифра пять только немного иной формы и с...
Вложенность объектов и классов C++
// Создайте класс Rect, инкапсулирующий функциональность прямоугольника // с вещественными координатами. Он должен содержать два вложенных объекта // класса Vector, которые определяют координаты левого верхнего (ptLT) и // правого нижнего (ptRB) углов прямоугольника. Предусмотрите в конструкторе // (конструкторах) инициализацию встроенных объектов. // Введите в класс два объекта...
C++ Vector как динамический массив http://www.cyberforum.ru/cpp/thread1283381.html
Здравствуйте. Не могу понять, как сделать с помощью контейнера vector, динамический массив. Заранее спасибо
C++ Объектные файлы *.obj, *.o - они случайно не кроссплатформенные? Если нет, то реальна ли конвертация? Объясню подробнее, о чем я. Пишем простой код на си, без всяких платформо- и компиляторозависимых функций #include <stdio.h> //#include <conio.h> int main() { printf("hello world"); //_getch(); return 0; подробнее

Показать сообщение отдельно
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
31.10.2014, 16:42     Приведение к структуре
Ну так понятно же, что естественные размеры машинных слов разные - разные границы этих слов в памяти. Тут нужно знать, как работает процессор с памятью, как он загружает данные из памяти в регистры. Нет тут никакого узкого вопроса. Сама тема достаточно обширная. Так же еще затрагиваются и другие темы. Это зависит не от разрядности ОС, а от работы самого процессора.

Цитата Сообщение от Izual Посмотреть сообщение
1. "0-член" - не выравнивается, т.к. находится на 0 позиции.
Это относительно начала структуры.

Выравнивание в x86 нужно для простых типов. Байт, слово, двойное слово и учетверенное слово ( в x86-64 ). ( В C++ это обычно char, short, int, long long ( и long в случае linux x86-64 ), ну и указатели ). Начало структуры выравнивается по самому большому слову, которое в ней присутствует. То есть максимум это 4 байта для x86-32 и 8 байт для x86-64.

И так, если в структуре поля идут в таком порядке - char, short, int, long long, то структура будет выровнена по границе 8 байтового слова ( это справедливао для x86-64, в x86-32 выравнивание будет по 4 байтовому слову, хоть long long и занимает 8 байт ).
Структура будет занимать: 1 + 1 + 2 + 4 + 8 = 16.
При этом, если в структуре только char и long long то она так же будет занимать 16 байт.
Если порядок такой: char, long long, char, long long, то размер уже будет 32 байта. Поэтому советуют размещать поля в отсортированном по размеру порядке. Нисходящем или восходящем - без разницы.

Цитата Сообщение от Izual Посмотреть сообщение
(ну и получение N от zp[N] программно, и влияет ли это только на компьютере сборщике программы или/и на те что только пользуются)
Естественно, что это влияет на модуль, который был собран с этим ключом. И что значит программно? Это опция компиляции. При компиляции генерируется код согласно опциям. Вы можете сами высчитать выравнивание, если уверены в последовательности членов.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru