当前位置: 首页 > 知识库问答 >
问题:

我的变量在C中存储在内存的什么地方?

越英韶
2023-03-14

我认为它们的分配如下:

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

我只是从C的角度提到这些变量。

如果我不对,请指正,因为我是初学C的。

共有1个答案

郦楷
2023-03-14

你做对了其中的一些,但不管是谁出的题,至少在一个问题上欺骗了你:

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

值得一提的是,“堆栈”被官方称为“自动存储类”。

 类似资料:
  • 本文向大家介绍对象,方法和变量在Java的内存中存储在哪里?,包括了对象,方法和变量在Java的内存中存储在哪里?的使用技巧和注意事项,需要的朋友参考一下 有五个主要内存区域,用于各种Java元素。以下是相同的列表。 类区域-该区域包含类的静态成员。 方法区域-此区域包含方法定义和可执行代码。 堆区域-该区域包含动态分配/取消分配的对象。如果某个对象不再被任何实时引用引用,则将其释放。 堆栈区域-

  • Swift中的静态变量是如何存储的? > 如果我从未调用func usesticvar(),会发生什么?这些变量是否已初始化? 如果我调用useStaticVar()然后再也不访问它们,会发生什么?应收账

  • 问题内容: 当我在node.js模块中执行此操作时: 去哪儿了?我的意思是:在浏览器中(如果未在函数中执行或以其他方式执行) 如果我执行此操作: 然后可以在中找到它,但这不是我想要的。 问题答案: 与浏览器不同,浏览器默认情况下将变量分配给全局空间(即窗口),而在Node中, 除非您 将变量 明确 分配给module.exports, 否则 变量的作用域为模块(文件)。 实际上,当您运行或文件中的

  • 问题内容: 我读过(在TensorFlow中): a的值多次存储在内存中。 为什么将值多次存储在内存中? 问题答案: 因为恒定张量的数据已嵌入到图定义中。这意味着这些数据既存储在维护图定义的客户端中,又存储在运行时中,为所有张量分配其自己的内存。 IE浏览器,尝试 你会看到的 该场是原始内容,一样的。 现在,要查看运行时分配,可以使用运行。 如果您使用进行任何评估,都会看到类似的内容 这意味着运行

  • 初始化数据段 BSS 堆栈 堆 代码 现在考虑以下程序: 在上面的程序中,arr和x都是在main函数内本地声明的。我认为这意味着它们都将在函数堆栈上分配空间。但是,当我在linux上运行size命令时,我发现实际上正在为数组分配数据段中的空间。

  • 问题内容: 在以下代码中- 如果在eclipse的调试窗口中看到,则两个对象(和)都包含变量(和)的两个值。 我确实知道在多态中,子类也可以使用超类的泛型方法。但是,即使在隐藏的情况下,为什么子类对象也存储超类变量的值。有什么用吗? 问题答案: 首先 :作为一般规则,如果类定义了子类可以访问的字段,则子类 不应 重新定义该字段。这真是个坏主意。首先,您所看到的是使 私有 字段正常工作。重新定义子类