Задать вопрос
@DVoropaev
Ставлю + к карме на хабре за ответы на вопросы

Сколько выделяется памяти под массив в C++?

Если я напишу так:
unsigned int a[] = {1, 2, 4, 8, 16, 32, 64, 128, 512, 256};

то сколько выделится памяти под массив? Зависит от компилятора?
Я предполагаю, что выделится ровно столько, сколько элементов перечислено в списке (т. е. sizeof(тип) * количество элементов в списке).
  • Вопрос задан
  • 4736 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
Я предполагаю, что выделится ровно столько, сколько элементов перечислено в списке

Совершенно верно за одним исключением. Памяти может выделятся чуть больше из-за выравнивания. Доступ к памяти по выровненным адресам намного быстрее происходит, из-за чего эффективнее например выделить дополнительный байт в начале (что бы адрес массива стал кратным 2/4/8/16 (смотря какое выравнивание в архитектуре используется).
Ответ написан
@SolidMinus
sizeof(type) * N, где type - тип, а N - количество элементов, плюс к этому числу добавляется количество байт до такого числа, чтобы оно было кратно выравниванию, как сказали выше.

Проще говоря, занимает столько, сколько занимает N таких элементов ( для int - 4N байт ) и это число округляется в верхнюю сторону до числа, чтобы было кратным некоторому числу K. Это число K и есть выравнивание, задается в настройках компилятора.

Нужно выравнивание, чтобы процессору проще вычислять было. Он гораздо проще работает с числами кратными степени двойки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы