Сколько места для хранения занимает следующее? - PullRequest
0 голосов
/ 12 июня 2010
int 72

Это вопрос нашего обсуждения в классе C #.Я сказал 2 байта, другие сказали, что он использует 32 бита или 4 байта из-за целочисленного типа.Что правильно?

Ответы [ 3 ]

8 голосов
/ 12 июня 2010

Вы должны быть более конкретным.Вы задаетесь вопросом:

  • размер переменной в памяти, содержащей это значение
  • размер MSIL для загрузки этого значения в стек IL, чтобы его можно было использовать ввыражение
  • размер MSIL для объявления локальной переменной, способной содержать значение
  • размер MSIL для объявления переменной-члена, способной содержать значение
  • размер машинного языка, создаваемого из MSIL во время выполнения
  • размер метаданных и отладочной информации, связанной с ним
  • что-то еще?

множество различных «затрат», связанных с появлением целочисленного литерала, такого как (int)72, появляющегося в программе.Если это часть более крупного выражения, упрощение может произойти во время компиляции, так что предельные затраты времени выполнения литерала вообще ничто (за исключением отладчика для отображения более длинного фрагмента исходного кода).

2 голосов
/ 12 июня 2010

В большинстве случаев он будет занимать 4 байта в стеке. Это потому, что int - это ключевое слово C #, которое отображается на Int32 в Общей системе типов (CTS) .

Все становится немного сложнее, если его нужно упаковать в коробку. См. эту статью для объяснения по боксу. В штучной упаковке значение на самом деле будет занимать 12 байтов (по крайней мере, в 32-битной системе) в куче; 4 для фактических данных, 4 для синхронизирующего блока и 4 дескриптор типа или таблица методов.

Так что вопрос не так прост.

0 голосов
/ 12 июня 2010

Как долго кусок веревки?

Это зависит от архитектуры процессора, на которой вы работаете (и, возможно, даже от того, какой компилятор вы используете). Эта страница объясняет - и дает вам ваш ответ.

...