内存受限系统中的数组

Kar*_*uru 3 c memory arrays programming-languages memory-management

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

Kel*_*Kel 8

如果"我的系统有内存,但它分散在不同的地方(碎片化)"意味着,堆虚拟内存被分段,并且"声明一个大小为10的字符数组"意味着你在堆栈内存中创建大小为10的字符数组:

char str[10];
Run Code Online (Sandbox Code Playgroud)

,然后将成功创建数组.

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

char *str2;
str2 = (char*) malloc(10 * sizeof(char));
Run Code Online (Sandbox Code Playgroud)

,然后malloc()将返回NULL.