Правда ли, что наименьшее выделение памяти в .net - это байт? - PullRequest
3 голосов
/ 09 декабря 2008

Правда ли, что наименьший объем памяти, который я могу выделить в управляемом коде, - это байт?

Правильно ли я понимаю, что булева переменная занимает гораздо больше памяти?

Есть ли способ выделить для меня память в .net кусками меньше байта?

Ответы [ 4 ]

10 голосов
/ 09 декабря 2008

Это правильно, выделения производятся на гранулярности байта (возможно, округлены до четного числа байтов или даже выше). Это верно для любой ОС, с которой я работал, поэтому она не относится к управляемому коду. Диспетчер памяти работает с байтами, а не битами.

С другой стороны, нетрудно упаковать логические значения в битовый массив, если у вас много логических значений и вы хотите добиться более высокой эффективности хранения (см. BitArray ).

8 голосов
/ 09 декабря 2008

Вы не можете распределять память на любом компьютере, о котором я знаю, в количестве, меньшем, чем один байт, определенно не на ПК.

Кроме того, с .net вы не выделяете никакой памяти, это все, что вам нужно, если только вы не используете C ++ в .Net (при сборке мусора, возможно, лучше сказать, что вы " используя «память вместо того, чтобы« выделять »память, практически невозможно определить, будет ли вызов new выделять память или повторно использовать память).

Если вы используете C ++, даже если вы можете запросить один байт, операционная система выделит блок памяти для вашей программы, который почти наверняка будет больше, чем один байт.

Если вы хотите сохранить массив битов, вы можете свернуть свою собственную коллекцию BitArray, где минимум, который вы будете хранить, - это байт (на самом деле вы должны использовать целые числа), и вы упаковываете и распаковываете биты в и из этого.

К счастью, .Net 3.5 поставляется с классом BitArray (, как, по-видимому, делали 1.0, 1.1, 2.0, 3.0 ... спасибо Джо )

Однако всегда есть стоимость. Упаковка и распаковка битов будут выполняться медленнее, чем сохранение массива логических значений.

Надеюсь, это поможет

2 голосов
/ 09 декабря 2008

Если у вас есть много логических значений, которые вы хотите хранить с эффективным использованием пространства, взгляните на класс BitArray .

0 голосов
/ 09 декабря 2008

Попробуйте перейти на Intel 4040 . Тогда ваши логические значения будут использовать только 4 бита. Однако, если вы не найдете его на барахолке или случайно попали на чердак, я бы порекомендовал битовые массивы, потому что с невероятным появлением 64-битных, ваши логические значения станут такими же большими, как Doubles, ужас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...