Слабый байт в структурах в C - PullRequest
3 голосов
/ 07 июля 2010

Что означает слабый байт в структурах в C?

Ответы [ 2 ]

11 голосов
/ 07 июля 2010

Обычно байты заполнения обеспечивают правильное выравнивание данных.Например:

struct x {
    int a;     // four bytes
    char b;    // one byte
               // three bytes slack
    int c;     // four bytes
} xx;

вероятно будет иметь свободные байты между b и c, чтобы выровнять c по правильной границе.

Вы можете проверить это, увидев, что1009 * дает вам (12 в случае выше, хотя это зависит от реализации).

Некоторые архитектуры работают медленнее, если им приходится использовать (например) четырехбайтовое значение, которое не выровнено по четыремграница байта. Некоторые архитектуры не допускают этого на all , вместо этого генерируя исключение.

2 голосов
/ 08 июля 2011
struct student 
{
     char a;//it takes 8 byte
     char b;
     char c;
     char d;
     int e;
};

struct student1;
{
     char a;
     int b;
     char c;//it takes 12 byte(suppose sizeof(int)=4;
}

студент рассматривается как:

____________________
|char|char|char|char|   // one byte for each char so there is no slack=4byte
|____|____|____|____|
____________________
|int |  * | *  |*   |   // int takes for byte;=4byte total space is 4+4=8;
|____|____|____|____|

и студент1 рассматривается как:

____________________
|char| s  |s   | s  |   // one byte for char
|____|____|____|____|   // s indicates a slack byte..=4byte
____________________
|int |*   |*   |*   |   //int takes four bytes;=4byte
|____|____|____|____|
 ___________________
|char| s  |s   | s  |   // one byte for char
|____|____|____|____|   // s indicates a slack byte..=4byte
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...