Розуміння Розташування Структур у Пам'яті
Свайпніть щоб показати меню
Структури пам'яті в мові програмування C відіграють ключову роль у розумінні того, як дані зберігаються та отримуються з пам'яті. Коли структура визначається в C, компілятор визначає, як розмістити її члени в пам'яті відповідно до правил вирівнювання та заповнення.
Огляд основних принципів розподілу пам'яті для структур у C:
main.c
123456789101112131415#include <stdio.h> // simple struct struct Test { char x; // 1 byte int y; // 4 bytes }; int main() { struct Test example; printf("Size of struct Test: %zu\n", sizeof(example)); printf("Address of example.x (char): %p\n", &example.x); printf("Address of example.y (int): %p\n", &example.y); return 0; }
Як і очікувалося, така структура повинна займати 5 байтів: 1 байт для char x, 4 байти для int y, але фактично це буде 8 байтів.
Чому розмір структури значно більший, ніж ми очікували?
Це відбувається тому, що компілятор може вставляти вирівнювання між членами, щоб кожен член починався з адреси, яка є кратною його розміру.
На зображенні видно, що перша частина пам'яті (світліша ділянка) належить змінній char x, яка займає лише один байт. Після цього йдуть три порожні байти — це вирівнювання, яке автоматично додається компілятором, щоб наступний елемент починався з правильної адреси. Після вирівнювання зберігається змінна int y, яка займає чотири байти.
У результаті структура займає загалом вісім байтів: один для char, три для вирівнювання та чотири для int.
Така організація допомагає процесору ефективніше отримувати доступ до даних. Без вирівнювання доступ до членів структури займав би більше часу, і програма працювала б повільніше.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат