任何编程语言的内存分配都取决于编译器或系统架构?如果它依赖于编译器,那么32位/64位架构有什么不同呢?如果它依赖于体系结构,那么为什么变量的内存大小对于16/32/64位体系结构是恒定的?松弛字节对系统架构的影响是什么?
发布于 2014-04-10 02:07:14
不是非此即彼。编译器、系统架构和系统约定对内存分配的工作方式有影响。
首先,系统架构包括指针的大小。因此,编译器使用的内存不能超过系统提供的内存,也不能寻址超过CPU支持的字节或指针。(我指的是实际的RAM和实际地址。当然,它可以使用类似虚拟内存的构造来将程序员使用的地址重新映射到CPU可以处理的地址)。
类似地,操作系统供应商通常有函数调用应该是什么样子的约定:参数是在堆栈上传递还是在寄存器中传递。是否应将大于特定大小的参数复制到堆栈上,或作为指向堆栈/堆对象的指针提供。如果你想调用系统函数,你必须使用这些约定。
然而,除此之外,细节由编译器决定。例如,许多Pascal编译器将附加的隐藏指针传递到同一语言中定义的内置函数中。只要您知道代码是使用相同的语言编写的,您就可以在系统体系结构允许的限制内就调用约定的差异达成一致。例如,如果您知道您的软件必须在具有更严格要求的类似MC68000上运行,您可以选择应用这些严格的要求,即使在不需要它的CPU上也是如此(比如编译代码,以便所有内容都至少是2字节对齐的,这样您的CPU代码也可以在具有该要求的旧CPU上运行)。
https://stackoverflow.com/questions/22969257
复制相似问题