考虑一下我的系统有内存,但它分散在不同的地方(碎片化)。没有四个连续的内存位置是免费的。在那种情况下,如果我用C语言声明一个大小为10的字符数组,会发生什么?
答案 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)
如果包含堆栈的所有内存都像这样碎片化,那么你要么拥有一个支持非连续堆栈的编译器(或运行时系统) - 在这种情况下它可能也足够智能支持非连续数组 - 或者基本上你所做的一切(比如调用子程序)都会导致堆栈溢出并导致程序崩溃。