所以我对用C语言编写的程序中的内存使用有几个问题。
如果我在主函数之外声明一个全局变量(没有 静态前缀),这将存储在静态内存或中 堆栈内存?
如果我在函数内声明一个带有静态前缀的变量, 这将存储在静态存储器或堆栈存储器中吗?
与问题1相同,但在const变量之外 主要功能。
问候。
答案 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()或其他变体)仅转到堆。