考虑到内存分为四段:数据段、堆段、堆栈段、代码段,其中全局变量、静态变量、常量数据类型、局部变量(在函数中定义和声明)、变量(在主函数中)分别存放在哪里? )、指针和动态分配的空间(使用 malloc 和 calloc)存储在内存中?
我认为它们的分配如下:
- 全局变量 -------> 数据
- 静态变量 -------> 数据
- 常量数据类型----->代码
- 局部变量(在函数中声明和定义)-------->堆栈
- 在主函数----->堆中声明和定义的变量
- 指针(例如,
char *arr
、int *arr
) -------> 堆 - 动态分配空间(使用malloc和calloc)-------->堆栈
我仅从 C 角度引用这些变量。
由于我是C语言新手,如果我错了,请纠正我。
最佳答案
您答对了其中一些问题,但无论是谁写了这些问题,至少在一个问题上欺骗了您:
- 全局变量 -------> 数据(正确)
- 静态变量 -------> 数据(正确)
- 常量数据类型 -----> 代码和/或数据。考虑字符串文字的情况,常量本身将存储在数据段中,并且对它的引用将嵌入到代码中
- 局部变量(在函数中声明和定义)-------->堆栈(正确)
- 在
main
中声明和定义的变量function ----->heap也是栈(老师是想骗你) - 指针(例如:
char *arr
、int *arr
) ------->堆数据或堆栈,具体取决于上下文。 C 允许您声明全局或static
指针,在这种情况下,指针本身将最终位于数据段中。 - 动态分配空间(使用
malloc
、calloc
、realloc
) -------->stackheap
值得一提的是,“栈”的正式名称是“自动存储类”。
关于c - C 中的变量存储在内存的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56910593/