Из Страуструпа * Основы C ++ , он предлагает чистый объектно-ориентированный язык (на стр. 4).
class complex { double re, im; /* … */ };
complex a[ ] = { {1,2}, {3,4} };
Он предполагает a
в чистом объектно-ориентированном языке выделяется в куче , а структура памяти a
выглядит следующим образом:
вероятный размер 3 * sizeof (ссылка) + 3 * sizeof (heap_overhead) + 4 * sizeof (double) .Предполагая, что ссылка - это одно слово, а объем кучи - два слова, мы получаем вероятный размер в 19 слов для сравнения с 8 словами в C ++.Эти накладные расходы памяти связаны с накладными расходами во время выполнения от выделения и косвенного доступа к элементам.Этот косвенный доступ к памяти обычно вызывает проблемы с использованием кэша и ограничивает возможности использования ПЗУ.
Я заметил, что верхняя ссылка не имеет служебных данных кучи (белый прямоугольник).
Я полагаю, что это явление общее, а не заданное для языка примеров на чистом ОО.
Но я не могу найти никакой ссылки (я признаю, что это не дружественный для поисковых систем вопрос).
Обновление
Спасибо за ваши ответы.Однако я забыл опубликовать свое первоначальное предположение.( Извините, это моя ошибка. )
На самом деле, я также подумал, что само по себе a
может быть размещено в стеке или где-то еще, у него самих кучи не будет.Но позже я заметил, что BS также говорит:
Сравните это с более типичным макетом из «чисто объектно-ориентированного языка», где each user-defined object is allocated separately on the heap
и доступ через ссылку...
на стр. 4.
Итак, я думаю, что он ограничил реализацию только кучей (или стеком).
(Ofконечно, возможно я читаю слишком много в этом предложении.)