Есть несколько аспектов, которые, я думаю, сбивают вас с толку.По сути, структуры - это просто способ сопоставить несколько связанных переменных вместе в блоке памяти.Так что, если у вас есть такая структура:
struct x {
int a;
int b;
}
И затем вы используете эту структуру, внутри компилятор действительно создает область памяти для всей структуры.Насколько она велика, зависит от системы, компилятора и т. Д., Но допустим, что int
имеет длину 4 байта (32 бита).Часто случается, что то, что делает компилятор, когда вы обращаетесь к myvar.b
, это действительно ссылается на 4 байта в область памяти, где хранится myvar.
Но все это делается во время компиляции, когда компилятор преобразует ваш C(или C ++) код в объектный файл.Фактически он не сохраняет саму структуру в объектном файле, а только смещения, необходимые для доступа к частям памяти.Таким образом, для связывания вообще не требуется знание структуры, поэтому, если вы удалите структуру из вашего .h во время связывания, ничего не изменится: потому что компоновщик даже не читает этот файл.