C中的内存分区

Memory Division in C

我正在尝试理解内存的划分。我知道它分为堆栈、堆、全局变量和常量。堆栈包含 main () 中的变量,它与 malloc 函数一起使用的堆;但是全局变量和常量之间的区别是什么?我希望你能帮助我解决这个疑问。谢谢!

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

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

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