c - 为什么使用固定长度分配而不是静态分配?

标签 c arrays int malloc

我知道我要问的问题对你们中的一些人来说可能很简单,但请耐心等待,我正在努力了解内存管理。既然我们对尺寸使用了一定的固定长度(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/

相关文章:

c++ - 在 C++ 中从字符串生成唯一无符号整数的最佳方法是什么?

java - 从Java中的int中获取数字的特定数字

c - 如何使用 Libevent 检测客户端连接到服务器

C 编程,存储来自 for 循环的数据

c - RAM 中如何看待整数?

java - 如何在java中实现模板(用列表元素替换字符串)。

c - 在字符串中间添加字符

c - 将 scanf 条目传递给 stdarg 函数

php - 用 PHP 递归替换字符串

arrays - 在 Go 中将字符串转换为单位数整数数组