内存受限系统中的数组

时间:2011-01-12 09:13:41

标签: c arrays memory memory-management programming-languages

考虑一下我的系统有内存,但它分散在不同的地方(碎片化)。没有四个连续的内存位置是免费的。在那种情况下,如果我用C语言声明一个大小为10的字符数组,会发生什么?

2 个答案:

答案 0 :(得分:8)

如果“我的系统有内存,但它分散在不同的地方(碎片化)”意味着,heap virtual memory是碎片,“声明一个大小的字符数组10“表示您在stack memory中创建大小为10的字符数组:

char str[10];

,然后将成功创建数组。

如果“声明一个大小为10的字符数组”意味着你用malloc()分配内存(在堆中分配):

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

,然后malloc()将返回NULL。

答案 1 :(得分:2)

如果包含堆栈的所有内存都像这样碎片化,那么你要么拥有一个支持非连续堆栈的编译器(或运行时系统) - 在这种情况下它可能也足够智能支持非连续数组 - 或者基本上你所做的一切(比如调用子程序)都会导致堆栈溢出并导致程序崩溃。