我知道我要问的问题对你们中的一些人来说可能很简单,但请耐心等待,我正在努力了解内存管理。既然我们对尺寸使用了一定的固定长度(N),那么为什么还要这样做:
int *arr = (int*)malloc(N * sizeof(int))
..而不是传统的静态方式:
int arr[N];
最佳答案
malloc
提供在 block 执行结束后仍然可用的内存,例如当它所在的函数返回时。
int A[N]
,如果它出现在函数内部,则使用保证仅在其所在 block 的执行尚未结束时才可用的内存。如果它出现在函数外部,则内存可用于所有程序执行,但 N
必须是常量。 (此外,即使在函数内部,某些 C 实现也不支持 int A[N]
,其中 N
不是常量。)
在通用操作系统的典型 C 实现中,malloc
有大量可用内存提供,但 int A[N]
在函数内部使用有限的堆栈区域,通常总共为 1 到 8 兆字节,具体取决于系统。
关于c - 为什么使用固定长度分配而不是静态分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60754788/