c - C 中的变量存储在内存的什么位置?

标签 c memory memory-management types

考虑到内存分为四段:数据段、堆段、堆栈段、代码段,其中全局变量、静态变量、常量数据类型、局部变量(在函数中定义和声明)、变量(在主函数中)分别存放在哪里? )、指针和动态分配的空间(使用 malloc 和 calloc)存储在内存中?

我认为它们的分配如下:

  • 全局变量 -------> 数据
  • 静态变量 -------> 数据
  • 常量数据类型----->代码
  • 局部变量(在函数中声明和定义)-------->堆栈
  • 在主函数----->堆中声明和定义的变量
  • 指针(例如,char *arrint *arr) -------> 堆
  • 动态分配空间(使用malloc和calloc)-------->堆栈

我仅从 C 角度引用这些变量。

由于我是C语言新手,如果我错了,请纠正我。

最佳答案

您答对了其中一些问题,但无论是谁写了这些问题,至少在一个问题上欺骗了您:

  • 全局变量 -------> 数据(正确)
  • 静态变量 -------> 数据(正确)
  • 常量数据类型 -----> 代码和/或数据。考虑字符串文字的情况,常量本身将存储在数据段中,并且对它的引用将嵌入到代码中
  • 局部变量(在函数中声明和定义)-------->堆栈(正确)
  • main 中声明和定义的变量function -----> heap 也是栈(老师是想骗你)
  • 指针(例如: char *arrint *arr ) -------> 数据或堆栈,具体取决于上下文。 C 允许您声明全局或 static指针,在这种情况下,指针本身将最终位于数据段中。
  • 动态分配空间(使用 malloccallocrealloc ) --------> stack heap

值得一提的是,“栈”的正式名称是“自动存储类”。

关于c - C 中的变量存储在内存的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56910593/

相关文章:

c - 如何忽略C中键盘的空行

可移植可执行文件中虚拟地址的计算

c++ - 在系统驱动器 (C :\)) 中创建文件时,fopen 无形地失败

ios - HERE map ios 的内存压力

C++:为什么这段代码给我内存问题/未定义的行为?

c++ - Fortran 77 处理 C++ 内存分配

python - 通过 Python 调用 C 函数 - 编译后

c - 结构数组中的内存对齐

python - "Resource exhausted: OOM when allocating tensor"在重新训练 GPT 2 模型 : 期间

ios - 我应该发布一个通过@{} 形式实例化的 NSDictionary 吗?