Что подразумевается под «номинальным распределением памяти» в контексте размера выделения примитивного типа данных? - PullRequest
1 голос
/ 31 июля 2011

Глядя на эту таблицу, описывающую типы данных в VB .

Один из столбцов помечен как «Номинальное распределение памяти». Что это значит? Почему здесь слово «номинальное»?

Ответы [ 2 ]

3 голосов
/ 31 июля 2011

Я полагаю, что в этом контексте «номинальный» означает количество байтов, занятых фактическими данными, содержащимися в этих типах данных, исключая любое хранилище, которое CLR использует для отслеживания значений, например распределение кучи, которое происходит, когда значениетип в штучной упаковке.

РЕДАКТИРОВАТЬ

Читая связанную статью, я заметил следующий раздел:

Потребление памяти

Когда вы объявляете элементарный тип данных, небезопасно предполагать, что его потребление памяти совпадает с его номинальным распределением памяти.Это связано со следующими соображениями:

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

Ширина платформы .Назначение хранилища на 64-разрядной платформе отличается от назначения на 32-разрядной платформе.

Таким образом, в основном это говорит о том, что общее хранилище на тип значения является номинальным хранилищем + независимо от того, какие отступы могут использоваться для выравниваниязначение на границе слова + возможное выделение кучи - опять же на усмотрение среды выполнения.

2 голосов
/ 31 июля 2011

«Номинал» относится к тому факту, что среда выполнения может свободно выделять столько места, сколько имеет смысл для данной переменной. Хотя для хранения данных требуется только два байта, среда выполнения может выделить для переменной 4 байта. Например, запись, хранящаяся в регистре 32-битного компьютера, «занимает» 4 байта. Аналогично, стек может работать таким же образом, поскольку 4 байта стекового пространства используются при передаче короткого замыкания в качестве параметра, например, для поддержания выравнивания слов. Доступ к памяти обычно быстрее, когда память выравнивается по естественным границам слова, поэтому среда выполнения может «тратить» пространство на выравнивание памяти. На 64-битных машинах в тех же сценариях, вероятно, будет использоваться 8 байтов каждый.

...