Я написал простую структуру. Вот код программы, которую я написал для печати размера переменных, объявленных внутри корпусногоПолучение неправильного размера структуры после компиляции для персонажа Тип данных
#include<stdio.h>
main()
{
struct book
{char name[10];
int pages;
float price;
}b1={"Blue",500,200.00};
printf("The Address Of Name Is = %d ",&b1.name);
printf("\nThe Address Of Pages Is = %d",&b1.pages);
printf("\nThe Address Of Price Is = %d",&b1.price);
}
Теперь проблема возникает, когда я компилирую программу и запустить ее. Я получаю размер массива CHARACTER, напечатанный как 12 байтов вместо 10 байтов. Вот вывод -
[email protected]:~$ ./a.out
The Address Of Name Is = 1264893904
The Address Of Pages Is = 1264893916
The Address Of Price Is = 1264893920
Может кто-нибудь объяснить, почему это происходит? Также обратите внимание, что я работаю в среде Linux.
Я понял, что программа работает быстрее из-за этого дополнения, которое выполняется компилятором. Теперь возникает вопрос, как определить, какой номер должен быть указан в адресе, если он отличается от архитектуры? Как и на x86, он должен быть другим, тогда как в некоторой другой архитектуре это должно быть какое-то другое число. –
В C++ 11 вы можете использовать http://en.cppreference.com/w/cpp/language/alignof – Salgar