Как посчитать смещение разных типов данных в структуре?

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

#include <stdio.h>

struct ABC{
    char a; 
    char b; 
    int k;  
    char c; 
};

int main()
{
    struct ABC a;
    printf("%lu\n", sizeof(a)); //12
    return 0;
}

Посмотрите в смещение().

SparKot 10.04.2022 19:25

Различные компиляторы будут давать разные результаты, поэтому, не зная, какой компилятор вы используете, сложно ответить. Просто угадал, похоже, что он фиксирует 32-битное значение для первых 2 символов, другое 32-битное значение для int и третье 32-битное значение для последнего char. Вы можете немного поэкспериментировать, создав массив этой структуры и напечатав размер массива.

mzimmers 10.04.2022 19:29
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
2
14
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, это работает так

Вот правила:

char выровнены по 1 байту

ints выровнены по 4 байтам

Вся структура должна быть выровнена по кратному наибольшему элементу.

окончательная структура будет

struct ABC
{
    char a; // Byte 0
    char b; // Byte 1
    char padding0[2]; // to align the int to 4 bytes
    int k;  // Byte 4
    char c; // Byte 5
    char padding1[3]; // align the structure to the multiple of largest element.
    // largest element is int with 4 bytes, the closest multiple is 12, so pad 3 bytes more.
}

Другие вопросы по теме