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

компоновка полей struct в памяти - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу вычисления стоимости разговора по телефону с учетом 20% скидки, предоставляемой по субботам и воскресеньям. http://www.cyberforum.ru/cpp-beginners/thread189325.html
Написать программу вычисления стоимости разговора по телефону с учетом 20% скидки, предоставляемой по субботам и воскресеньям. Извне вводится длительность разговора (в целых минутах) и день недели цифрой (1- понедельник,… 7 – воскресенье). Подскажите, пожалуйста, буду очень признателен :)
C++ Перегрузка оператора + Осуществляю перегрузку оператора +. и вот почему-то член класса s меняет свою длину с 4 до 7 и мне вот это не понятно.. Подскажите, пожалуйста! #include <iostream> #include <string.h> using std::cout; using std::cin; using std::endl; class Arifm http://www.cyberforum.ru/cpp-beginners/thread189314.html
создание классов C++
Здравствуйте Помогите с созданием классов пожалуйста Заранее спасибо Написать программу на языке C++, моделирующую поведение сборщика арте- фактов (Stalker) путём создания соответствующего класса. Все сталкеры имеют одинаковую скорость v0 без груза. Каждый сталкер имеет свой псевдоним и свою грузоподъёмность m0. Сталкер добывает (mine) артефакты массы m, затем пытается из вынести...
C++ Удаление последнего элемента списка
А вот когда удаляешь последний элемент списка, обязательно в предпоследнем присваивать указатель на NULL?
C++ возможные комбинации перестановки n чисел http://www.cyberforum.ru/cpp-beginners/thread189280.html
Нужно вывести на экран все возможные комбинации перестановки из n заданных чисел подскажите как это эффективнее реализуати если n=3 то комбинаций 6 если 4 то 24 і так далє если бы это был отсортированный набор то можно бы было сортировать в абратную строну (по спадению или зростаню) и выводить каждый этап перестановки например с помощью переделанного метода пузырька заранее благодарю за...
C++ Матрицы По данной булевской квадратной матрицей А порядка m вычислить матрицу A в степени n. подробнее

Показать сообщение отдельно
CheshireCat
Эксперт С++
2891 / 1240 / 78
Регистрация: 27.05.2008
Сообщений: 3,343
11.11.2010, 08:54     компоновка полей struct в памяти
Не можешь.
Причин тут две:
1. У всех известных мне современных компиляторов C и С++ существует такая фича, как выравнивание (alignment) данных - и полей структур в том числе. При этом, для различных компиляторов это выравнивание может оказаться разным, - т.е. если твоя программа была скомпилирована Компилятором1, и записала структуру в файл как raw data (просто поток байтов), а потом перекомпилирована другим Компилятором2, и попыталась прочесть все те же данные, - ты можешь получить верные данные, а можешь получить бред....... Потому что выравнивание может оказаться разным, а может одинаковым, - как карта ляжет.
Можно победить, насильственно указав компилятору желаемое выравнивание:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma pack(push, 1)
 
struct SMy {
   float field1;
   DWORD field2;
   // ...
   int field3;
   short field4;
   // ...
};
 
#pragma pack(pop)
(в твоем конкретном компиляторе прагма может быть немного иной, но суть та же.... Читай документацию к компилятору.)

2. Существует еще такая штука, как архитектуры big-endian и little-endian - попросту говоря, различный порядок байтов в многобайтовых переменных (int, etc...). Так вот, для различных процессоров этот порядок лехко может оказаться разным, и при переносе файла данных между различными машинами (по сети, или еще каким-то способом....) ты гарантированно получишь бред.

А так - да, если программа компилируется одним и тем же компилятором, с одними и теми же опциями, и гарантированно работает на машинах одной и той же архитектуры, - да, можешь быть уверен. Компилятор не будет самовольно переставлять поля структур, их последовательность в памяти будет всегда одной и той же.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru