【发布时间】:2015-08-25 11:20:38
【问题描述】:
考虑到内存分为数据、堆、栈、代码四段,全局变量、静态变量、常量数据类型、局部变量(在函数中定义和声明)、变量(在主函数中)、指针和动态分配的空间(使用 malloc 和 calloc)存储在内存中?
我认为它们将被分配如下:
- 全局变量------->数据
- 静态变量------->数据
- 常量数据类型----->代码
- 局部变量(在函数中声明和定义)-------->堆栈
- 在主函数中声明和定义的变量----->堆
- 指针(例如,
char *arr、int *arr)------->堆 - 动态分配空间(使用 malloc 和 calloc)--------> 堆栈
我只是从 C 的角度来指代这些变量。
如果我是 C 新手,如果我错了,请纠正我。
【问题讨论】:
-
main只是另一个函数。除非malloc像其他地方一样,否则变量会进入堆栈。 -
这实际上是由C标准定义的吗?我认为这更依赖于架构。
-
大部分细节可能依赖于实现。 (即,没有什么可以禁止 C 编译器/运行时堆分配所有内容,包括“堆栈帧”。)
-
我自己的注意事项:阅读@Kerrek SB 的答案。
标签: c memory memory-management types