【发布时间】:2011-01-12 09:13:40
【问题描述】:
考虑我的系统有内存,但是分散在不同的地方(碎片化)。没有四个连续的内存位置是空闲的。在那种情况下,如果我在 C 语言中声明一个大小为 10 的字符数组,会发生什么?
【问题讨论】:
标签: c arrays memory memory-management programming-languages
考虑我的系统有内存,但是分散在不同的地方(碎片化)。没有四个连续的内存位置是空闲的。在那种情况下,如果我在 C 语言中声明一个大小为 10 的字符数组,会发生什么?
【问题讨论】:
标签: c arrays memory memory-management programming-languages
如果“我的系统有内存,但是分散在不同的地方(碎片化)”表示heap virtual memory是碎片化的,“声明一个大小为10的字符数组” 表示,您在stack memory 中创建大小为 10 的字符数组:
char str[10];
,则数组创建成功。
如果“声明一个大小为 10 的字符数组” 意味着您使用 malloc() 分配内存(在堆中分配):
char *str2;
str2 = (char*) malloc(10 * sizeof(char));
,然后 malloc() 将返回 NULL。
【讨论】:
如果您的所有内存(包括堆栈)都像这样分段,您要么有一个支持非连续堆栈的编译器(或运行时系统)——在这种情况下,它可能也足够聪明,可以支持不连续的数组——或者基本上你所做的一切(比如调用子程序)都会导致堆栈溢出并使你的程序崩溃。
【讨论】: