2012-05-14 3 views
1

После добавления дополнительных байтов для ссылки на то, что произойдет с этими дополнительными байтами во время выполнения. Являются ли эти лишние байты пустыми или какие данные будут содержаться в них?Сомнения в отношении прокладки структуры

Любая помощь по этому вопросу определяется. Благодаря!!!

+1

В общем, любой старый мусор. – BoBTFish

+1

Что такое «пустой» байт? Вы имеете в виду, как дыра в вашем чипе памяти? –

ответ

4

ISO 9899: 2011 6.2.6.1/6

Когда значение сохраняется в объекте структуры или типа союза, в том числе в объекте члена, байты представление объекта , которое соответствует любым байтам заполнения, принимает неопределенные значения.

Это неуказанное поведение, означающее, что компилятор может поместить туда какое-либо значение, включая мусор, если оно делает это последовательно для всех структур. Компилятору не нужно документировать пользователю, как он обрабатывает байты заполнения.

3

Это может быть что угодно. Если вы выделили структуру, используя calloc, тогда они будут изначально нулевыми. Но последующие операции могут привести к тому, что им напишет мусор.

1

Прокладка выполняется в конструкциях для выравнивания ее элементов. Это делается компилятором для оптимизации, чтобы доступ был быстрее. Вам не нужно беспокоиться о пробелах в вашей структуре. Просто продолжайте и отсылайте/удаляйте членов своей структуры. Одна очень хорошая статья является http://www.geeksforgeeks.org/archives/9705

+0

Выравнивание не обязательно является функцией оптимизации. Некоторое оборудование * требует * определенного выравнивания для некоторых типов, которые больше одного. –

Смежные вопросы