Массив в системе с ограниченным объемом памяти - PullRequest
3 голосов
/ 12 января 2011

Учтите, что в моей системе есть память, но она разбросана по разным местам (фрагментирована). Там нет четырех смежных областей памяти, которые свободны. В этом случае, если я объявлю массив символов размером 10 на языке C, что произойдет?

Ответы [ 2 ]

8 голосов
/ 12 января 2011

Если "моя система имеет память, но она разбросана по разным местам (фрагментировано)" означает, что куча виртуальной памяти фрагментирована, а "объявляет символмассив размером 10 " означает, что вы создаете массив символов размером 10 в стеке памяти :

char str[10];

, тогда массив будет успешно создан.

Если "объявить массив символов размером 10" означает, что вы выделяете память с помощью malloc () (allocate in heap):

char *str2;
str2 = (char*) malloc(10 * sizeof(char));

, тогда malloc () вернет NULL.

2 голосов
/ 12 января 2011

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

...