在C中有两种创建数组的方法:
int array[100];
Run Code Online (Sandbox Code Playgroud)
和
int * array = malloc(sizeof(int)*100);
Run Code Online (Sandbox Code Playgroud)
使用第二个语句很容易检查是否有足够的内存可用于创建数组,例如:
if(array == NULL){
goto OutOfMemory;
}
Run Code Online (Sandbox Code Playgroud)
但是你怎么检查第一个成功的?假设这是在微控制器而不是计算机上运行的.
Lin*_*ios 10
堆栈上的数组分配(第一种方式)没有可恢复的故障.它只会失败,如果分配它会导致堆栈溢出,此时程序已中止/终止.
当您以第一种方式分配数组时,它通常在函数调用时分配在堆栈上.如果堆栈上没有足够的空间来分配它,程序将因堆栈溢出/段错误而中止.
当您分配第二种方式时,在实际调用malloc时,您正在向内存管理器询问堆上的内存.
编辑:正如@Deduplicator所提到的,如果你在没有内存保护的系统上,没有足够的空闲堆栈空间来分配数组可能会导致超支和更微妙的问题(尽管很可能它很快会在非法指令上失败) ).
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |