关于静态内存和动态内存(堆栈和堆)的疑问

时间:2014-04-02 14:25:18

标签: c

所以我对用C语言编写的程序中的内存使用有几个问题。

  1. 如果我在主函数之外声明一个全局变量(没有 静态前缀),这将存储在静态内存或中 堆栈内存?

  2. 如果我在函数内声明一个带有静态前缀的变量, 这将存储在静态存储器或堆栈存储器中吗?

  3. 与问题1相同,但在const变量之外 主要功能。

  4. 问候。

4 个答案:

答案 0 :(得分:0)

只要程序运行,所有全局变量和静态变量都需要处于活动状态。函数返回时不会清除它们。所以他们不能存放在堆栈上 这些存储在data segment上。您可以阅读this以了解变量存储在程序的内存布局中的位置。

答案 1 :(得分:0)

我实际上并不知道你的问题的答案,但后来我搜索了这个,以下文件几乎清除了我的内存布局。浏览给定链接中的示例以便更好地理解: Geeksforgeeks

答案 2 :(得分:0)

所有三个都没有指明它们是否在堆栈中,但在每种情况下它们都必须位于堆栈顶部,等于或高于main的水平。

原因是即使堆栈上的唯一函数是main,所有三个都应该保持一个值,但是你不能(可移植地)确定这样的变量是否在堆栈顶部。

答案 3 :(得分:0)

国际海事组织,没有什么叫做“静态记忆”'段。

(1)在DATA / BSS中,它一直存在,直到程序终止。 (2)也在数据/ BSS中,它一直存在直到程序终止。 (3)同样在DATA / BSS中,它一直存在直到程序终止。

所以如果你想知道有什么区别?

(1)变量的范围(可见性)贯穿整个程序,其他文件可以执行extern并获取变量,并且可以更改此变量的数据。

(2)这个静态变量的范围只在函数内,生命是通过程序而其他文件无法访问这个变量。

(3)与上述(1)相同,但不能将该值改为常量。

所有动态分配(使用calloc()或malloc()或其他变体)仅转到堆。