Memory 任何编程语言的内存分配取决于编译器还是系统架构?

Memory 任何编程语言的内存分配取决于编译器还是系统架构?,memory,memory-management,architecture,programming-languages,Memory,Memory Management,Architecture,Programming Languages,任何编程语言的内存分配取决于编译器还是系统架构?如果它依赖于编译器,那么32位/64位体系结构有什么区别?如果这取决于体系结构,那么为什么16/32/64位体系结构的变量内存大小是恒定的?空闲字节对系统体系结构有什么影响?不是非此即彼。编译器、系统架构和系统约定对内存分配的工作方式有影响 首先,系统架构包括指针的大小。因此,编译器不能使用比系统提供的内存更多的内存,也不能处理比CPU支持的更多字节或具有更大的指针。(我指的是实际RAM和实际地址。当然,它可以使用类似虚拟内存的结构将程序员使用的地

任何编程语言的内存分配取决于编译器还是系统架构?如果它依赖于编译器,那么32位/64位体系结构有什么区别?如果这取决于体系结构,那么为什么16/32/64位体系结构的变量内存大小是恒定的?空闲字节对系统体系结构有什么影响?

不是非此即彼。编译器、系统架构和系统约定对内存分配的工作方式有影响

首先,系统架构包括指针的大小。因此,编译器不能使用比系统提供的内存更多的内存,也不能处理比CPU支持的更多字节或具有更大的指针。(我指的是实际RAM和实际地址。当然,它可以使用类似虚拟内存的结构将程序员使用的地址重新映射到CPU可以处理的东西)

类似地,操作系统供应商通常有函数调用的约定:参数是在堆栈上传递还是在寄存器中传递。是否应将大于特定大小的参数复制到堆栈上,或作为指向堆栈/堆对象的指针提供。如果要调用系统函数,必须使用这些约定

然而,除此之外,细节由编译器决定。例如,许多Pascal编译器将附加的隐藏指针传递到用同一种语言定义的内置函数中。只要您知道代码是使用相同的语言编写的,就可以在系统架构允许的范围内就调用约定的差异达成一致。例如,如果您知道您的软件必须在具有更严格要求的类似CPU上运行,您可以选择在不需要的CPU上应用这些严格要求(例如编译代码,使所有内容都至少2字节对齐,这样您的MC68040代码也将在具有该要求的旧MC68000上运行)