C 内存受限系统中的数组
假设我的系统有内存,但它分散在不同的地方(支离破碎)。没有四个连续的可用内存位置。在这种情况下,如果我用C语言声明一个大小为10的字符数组,会发生什么情况?如果“我的系统有内存,但它分散在不同的地方(碎片)”意味着是碎片化的,而“声明一个大小为10的字符数组”意味着您在以下位置创建大小为10的字符数组: ,则将成功创建阵列 如果“声明大小为10的字符数组”表示使用malloc()分配内存(在堆中分配):C 内存受限系统中的数组,c,arrays,memory,memory-management,programming-languages,C,Arrays,Memory,Memory Management,Programming Languages,假设我的系统有内存,但它分散在不同的地方(支离破碎)。没有四个连续的可用内存位置。在这种情况下,如果我用C语言声明一个大小为10的字符数组,会发生什么情况?如果“我的系统有内存,但它分散在不同的地方(碎片)”意味着是碎片化的,而“声明一个大小为10的字符数组”意味着您在以下位置创建大小为10的字符数组: ,则将成功创建阵列 如果“声明大小为10的字符数组”表示使用malloc()分配内存(在堆中分配): ,则malloc()将返回NULL。如果您的所有内存(包括堆栈)都是这样分段的,那么您要么有
,则malloc()将返回NULL。如果您的所有内存(包括堆栈)都是这样分段的,那么您要么有一个支持非连续堆栈的编译器(或运行时系统),在这种情况下,它也可能足够聪明,可以支持非连续数组,或者基本上支持您所做的一切(如调用子例程)将导致堆栈溢出并使程序崩溃。好的。谢谢你的回复。因此,对于碎片堆栈,支持非连续堆栈的编译器似乎可以解决这个问题。gcc是否支持非连续堆栈?您能告诉我一个支持非连续堆栈的好编译器吗?
char str[10];
char *str2;
str2 = (char*) malloc(10 * sizeof(char));