gpt4 book ai didi

c - C 中的内存划分

转载 作者:行者123 更新时间:2023-11-30 15:24:51 26 4
gpt4 key购买 nike

我试图理解内存的划分。我知道它分为栈、堆、全局变量和常量。堆栈包含 main () 内的变量,以及与 malloc 函数一起使用的堆;但是全局变量和常量有什么区别呢?希望您能帮我解答这个疑惑。谢谢!

最佳答案

常量可以由编译器内联,这样它们就根本不受内存位置的支持。由内存位置支持的常量可以放入只读内存中。确切的实现取决于编译器、操作系统和硬件。例如,在具有现代操作系统的现代计算机上,常量可以放置在标记为只读的虚拟内存页面中。尝试写入此类内存将产生一般保护错误。在嵌入式系统上,常量可以放置在 ROM 中。

您在程序中使用的文字字符串通常会分配到常量内存中。

C 标准不要求这些。可移植程序唯一需要的就是您不要尝试修改常量。如果您修改编译器认为恒定的数据,则程序的行为是未定义的。例如,考虑一下如果您获取程序中使用的字符串文字的地址并尝试通过此指针修改该字符串,会发生什么情况。相同的字符串可以在程序的其他地方使用,并且编译器可以合并所有出现的字符串,并且只为该字符串的一份副本分配空间。在某些实现上,您可能能够修改字符串,这将影响程序中碰巧使用相同字符串文字的所有部分。在其他实现中,您将遇到一般保护错误,并且您的程序将终止。在其他实现中,您将修改字符串,就好像它不是常量一样。

关于c - C 中的内存划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28197600/

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