Объем памяти, занимаемый массивом

Вопрос:Это основной вопрос, но я не смог найти окончательного ответа. Надеюсь, кто-то может пролить свет. Я хочу знать, сколько пространства памяти занимает один массив. Используют ли несколько массивов разных типов, но с одним и тем же объединенным размером байта, того же объема памяти? Используется ли массив в том же пространстве памяти, что и несколько массивов

Вопрос:

Это основной вопрос, но я не смог найти окончательного ответа. Надеюсь, кто-то может пролить свет.

Я хочу знать, сколько пространства памяти занимает один массив.

Используют ли несколько массивов разных типов, но с одним и тем же объединенным размером байта, того же объема памяти?

Используется ли массив в том же пространстве памяти, что и несколько массивов с одинаковым размером?

Некоторые примеры:

(на моей системе 8051 микроконтроллер,      char = 1 byte;    int = 2 bytes ;    float = 4 bytes;)

//case 1 char array_nr1[40]; //case 2 char array_nr1[10]; char array_nr2[10]; char array_nr3[10]; char array_nr4[10]; //case 3 int array_nr1[10]; int array_nr2[10]; //case 4 float array_nr1[10]; //case 5 char array_nr1[10]; int array_nr2[5]; float array_nr3[5];

Все ли 5 ​​случаев занимают одинаковый объем памяти (40 байт)? Есть ли другие данные, которые хранятся в памяти (например, базовый адрес массива).

Спасибо.

Ответ №1

Память, занятая массивом, может быть получена с помощью оператора sizeof. Например

char array_nr1[40]; printf( «%zun», sizeof( array_nr1 ) );

Выход будет равен 40, потому что sizeof( char ), размер элемента которого гарантированно равен 1

Вы можете написать то же, например, для массива

int array_nr1[10];

Но было бы лучше рассчитать размер массива, умножив sizeof его элемента на числовое число элементов.

Итак, эта запись

sizeof( array_nr1 )

эквивалентно

10 * sizeof( int )

Итак, вопрос в том, что такое размер объекта типа int? Это зависит от реализации. Например sizeof (int) может быть равным 2 или 4 или некоторым другим значениям.

Итак, в вашем случае, если sizeof( int ) равно 2, то эти два массива

int array_nr1[10]; int array_nr2[10];

Занять 2 * ( 10 * sizeof( int ) ) = > 40 байт. Это тот же объем памяти, который занят массивом

char array_nr1[40];

Если sizeof( int ) равно 4, то массивы занимают разный объем памяти.

Такое же наблюдение допустимо для массивов типа float. Обычно размер в байтах объекта типа float равен 4. Поэтому, если sizeof( int ) равно 2, то эти массивы

char array_nr1[10]; int array_nr2[5]; float array_nr3[5];

occuoy тот же объем памяти, что и массив

char array_nr1[40];

потому что

10 * sizeof (char) + 5 * sizeof (int) + 5 * sizeof (float) = > 10 * 1 + 5 * 2 + 5 * 4 = > 40 байт.

Оцените статью
Добавить комментарий