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

我的变量在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命令时,我发现实际上正在为数组分配数据段中的空间。

  • 我试图理解将jwt存储在本地存储(倾向于xss)与cookie(倾向于csrf)的安全含义。我想了解如果我将jwt令牌存储在前端的应用状态中的安全性影响,就像在redux商店中一样。 编辑: 我试图了解有关存储代币的更多信息。似乎所有的文章和答案实际上都是在确定有两种方法可以做到这一点后开始讨论的,即cookie或浏览器存储。像这样一个相关的问题:在浏览器中的何处存储JWT?如何防范CSRF?像这