gpt4 book ai didi

c - 哪些内存位置用于变量存储

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:10 25 4
gpt4 key购买 nike

高级语言如 javascript 不会给程序员一个选择存储变量的位置。但 C 确实如此。我的问题是:是否有任何关于在哪里存储变量的指导方针,例如依赖关于尺寸、用途等。

据我了解,可以存储三个位置数据(不包括用于实际代码的代码段):

  1. 数据段
  2. 堆栈

那么短暂的小数据项应该存储在堆栈中吗?

必须在函数之间共享的数据项呢?这些项目可以存储在堆上或数据段中。你怎么决定选择哪个?

最佳答案

您正在通过错误的望远镜观察。您没有指定特定的内存段来存储变量(特别是因为“内存段”的概念是高度平台相关的)。

在 C 代码中,您可以根据对代码有意义的内容以及基于编译器将生成机器代码以将对象存储在适当的段中(如果适用)

例如,在文件范围内(在任何函数之外)或使用关键字 static 声明的任何变量都将具有静态存储持续时间,这意味着它们在程序启动时分配并持有直到程序终止;这些对象可能分配在数据段或 bss 段中。在没有 static 关键字的函数或 block 中声明的变量具有自动存储持续时间,并且(通常)分配在堆栈上。

字符串文字和其他编译时常量对象通常(但不总是!)分配在只读段中。像 3.14159 这样的数字文字和像 'A' 这样的字符常量不是对象,并且(通常)没有为它们分配内存;相反,这些值直接嵌入到机器代码指令中。

堆是为动态存储保留的,变量本身不存储在那里;相反,您使用像 malloc 这样的库调用在运行时获取堆的一 block ,并将生成的指针值分配给如上所述分配的变量。 变量 将存在于堆栈或数据段中,而它指向 的内存存在于堆中。

理想情况下,函数应该仅通过参数、返回值和异常(如果适用)进行通信;函数不应通过外部变量(即全局变量)共享数据。函数参数通常分配在堆栈上,尽管某些平台可能通过寄存器传递参数。

关于c - 哪些内存位置用于变量存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15836642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com