Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 内存受限系统中的数组_C_Arrays_Memory_Memory Management_Programming Languages - Fatal编程技术网

C 内存受限系统中的数组

C 内存受限系统中的数组,c,arrays,memory,memory-management,programming-languages,C,Arrays,Memory,Memory Management,Programming Languages,假设我的系统有内存,但它分散在不同的地方(支离破碎)。没有四个连续的可用内存位置。在这种情况下,如果我用C语言声明一个大小为10的字符数组,会发生什么情况?如果“我的系统有内存,但它分散在不同的地方(碎片)”意味着是碎片化的,而“声明一个大小为10的字符数组”意味着您在以下位置创建大小为10的字符数组: ,则将成功创建阵列 如果“声明大小为10的字符数组”表示使用malloc()分配内存(在堆中分配): ,则malloc()将返回NULL。如果您的所有内存(包括堆栈)都是这样分段的,那么您要么有

假设我的系统有内存,但它分散在不同的地方(支离破碎)。没有四个连续的可用内存位置。在这种情况下,如果我用C语言声明一个大小为10的字符数组,会发生什么情况?

如果“我的系统有内存,但它分散在不同的地方(碎片)”意味着是碎片化的,而“声明一个大小为10的字符数组”意味着您在以下位置创建大小为10的字符数组:

,则将成功创建阵列

如果“声明大小为10的字符数组”表示使用malloc()分配内存(在堆中分配):


,则malloc()将返回NULL。

如果您的所有内存(包括堆栈)都是这样分段的,那么您要么有一个支持非连续堆栈的编译器(或运行时系统),在这种情况下,它也可能足够聪明,可以支持非连续数组,或者基本上支持您所做的一切(如调用子例程)将导致堆栈溢出并使程序崩溃。

好的。谢谢你的回复。因此,对于碎片堆栈,支持非连续堆栈的编译器似乎可以解决这个问题。gcc是否支持非连续堆栈?您能告诉我一个支持非连续堆栈的好编译器吗?
char str[10];
char *str2;
str2 = (char*) malloc(10 * sizeof(char));