任何编程语言的内存分配都取决于编译器或系统架构?如果它依赖于编译器,那么32位/ 64位架构会有什么区别呢?如果它取决于体系结构,那么为什么变量的内存大小对于16/32/64位体系结构是恒定的?松弛字节对系统架构有什么影响?
答案 0 :(得分:0)
它不是或者。编译器,系统架构和系统约定会影响内存分配的工作方式。
首先,系统架构包括指针的大小。因此,编译器不能使用比系统提供的内存更多的内存,并且无法处理更多字节或具有比CPU支持的更大的指针。 (我的意思是实际的RAM和实际地址。当然,它可以使用类似虚拟内存的结构将程序员使用的地址重新映射到CPU可以处理的地址。)
类似地,通常操作系统供应商具有函数调用的约定:参数是在堆栈上还是在寄存器中传递。是否应将大于特定大小的参数复制到堆栈中,或者将其作为指向堆栈/堆对象的指针提供。如果要调用系统函数,则必须使用这些约定。
然而,除此之外,由编译器决定细节。例如。许多Pascal编译器将其他隐藏指针传递给将范围封装到以相同语言定义的内置函数中。只要您知道代码是使用相同的语言编写的,就可以在系统架构允许的限制内就调用约定的差异达成一致。例如。如果您知道您的软件必须在具有更严格要求的类似CPU上运行,您甚至可以选择在不需要它的CPU上应用这些严格的要求(比如编译代码,因此所有内容至少都是2字节对齐所以您的MC68040代码也将在具有该要求的旧MC68000上运行。