首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任何编程语言的内存分配都取决于编译器或系统架构?

任何编程语言的内存分配都取决于编译器或系统架构?
EN

Stack Overflow用户
提问于 2014-04-10 01:01:55
回答 1查看 101关注 0票数 0

任何编程语言的内存分配都取决于编译器或系统架构?如果它依赖于编译器,那么32位/64位架构有什么不同呢?如果它依赖于体系结构,那么为什么变量的内存大小对于16/32/64位体系结构是恒定的?松弛字节对系统架构的影响是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-04-10 02:07:14

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22969257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档