Это находится на Стеке или "куче"?

Тип size_t является типом, возвращенным sizeof оператором. Это - целое число без знака, способное к выражению размера в байтах любого диапазона памяти, поддерживаемого на хост-машине. Это (обычно) связывается с ptrdiff_t в том ptrdiff_t, значение целого числа со знаком, таким образом, что sizeof (ptrdiff_t) и sizeof (size_t) равны.

При записи C кода Вы должны всегда использование size_t, имея дело с диапазонами памяти.

международный тип, с другой стороны, в основном определяется как размер целочисленного значения (со знаком), которое хост-машина может использовать, чтобы наиболее эффективно выполнить целочисленную арифметику. Например, на многих более старых компьютерах типа ПК значение sizeof (size_t) было бы 4 (байты), но sizeof (интервал) будет 2 (байт). Арифметика на 16 битов была быстрее, чем арифметика на 32 бита, хотя ЦП мог обработать (логическое) пространство памяти до 4 гибибайт.

Использование международный тип только, когда Вы заботитесь об эффективности, поскольку ее фактическая точность зависит сильно от обоих параметров компилятора и архитектуры машины. В особенности стандарт C определяет следующие инварианты: sizeof (символ) < = sizeof (короткий) < = sizeof (интервал) < = sizeof (долго) помещающий никакие другие ограничения на фактическое представление точности, доступной программисту для каждых из этих типов примитивов.

Примечание: Это не то же как в Java (который на самом деле определяет разрядную точность для каждого из типов 'символ', 'байт', 'короткий', 'международный' и 'длинный').

5
задан Frank V 29 June 2009 в 03:24
поделиться

1 ответ

Если оставить в стороне глобальные переменные и переменные, объявленные с модификатором static (которые выделяются в отдельной области памяти), локальные переменные, объявленные в теле функции, размещаются в стеке, тогда как все, что вы вызываете malloc , размещается в куче. Кроме того, массивы переменного размера C99 и память, выделенная с помощью _alloca , окажутся в стеке.

int* x[10];   // The addresses are held on the stack
int i;        // On the stack
for(i = 0; i < 10; ++i)
   x[i] = malloc(sizeof(int)*10);  // Allocates memory on the heap

Например, в приведенном выше коде в стеке есть массив значений int * хранение адресов в 10 различных местах в куче.

17
ответ дан 18 December 2019 в 09:52
поделиться
Другие вопросы по тегам:

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