首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于内存模型的问题

关于内存模型的问题
EN

Stack Overflow用户
提问于 2013-05-08 09:36:24
回答 1查看 115关注 0票数 1

当我阅读与编译器相关的书时,我发现有两种主要的内存模型。

注册到注册模型和内存到内存模型。

在书中,它说寄存器到寄存器模型忽略了机器对寄存器数量的限制,编译器后端必须插入加载和存储。是因为寄存器到寄存器模型可以使用虚拟registers...and吗?这个模型保留了所有可以存储在寄存器中的值,所以在完成之前,它必须插入加载和存储(与内存相关)?

此外,在内存到内存部分,书中说编译器后端可以删除冗余的加载和存储。这是否意味着模型必须删除冗余的内存使用来进行优化?

EN

回答 1

Stack Overflow用户

发布于 2013-05-08 09:47:13

我将在编译器的上下文中回答您的问题,因为这就是您所读到的内容。在计算机体系结构上下文中,这些答案将不适用,因此请谨慎阅读。

是因为寄存器到寄存器模型可以使用虚拟registers...and这个模型保留了可以存储在寄存器中的所有值,所以在完成之前它必须插入加载和存储(与内存相关)?

这可能是一个原因。如果底层机器不支持寄存器/寄存器操作,则需要将“虚拟寄存器”操作转换为加载和存储。类似地,如果您的编译器在IR阶段假设了一个无限寄存器机器,那么在寄存器分配阶段(在这个阶段中,您将无限的虚拟寄存器集映射到有限的真实寄存器集,在用完时使用内存访问),可能需要将一些寄存器溢出到内存。

这是否意味着模型必须删除冗余的内存使用来进行优化?

是的,这是编译器可能会做的优化步骤。如果我们这样做:

代码语言:javascript
运行
复制
register1 <- LOAD 1234
// Operation using register 1 that leaves the result in register 1
STORE register1, 1234
register1 <- LOAD 1234
// Another operation that uses register 1
STORE register1, 1235

可以将其优化为只将值保留在寄存器中,如下所示:

代码语言:javascript
运行
复制
register1 <- LOAD 1234
// Operation using register 1 that leaves the result in register 1
// Another operation that uses register 1
STORE register1, 1235

这显然更有效,因为它避免了与寄存器相比速度较慢的额外DRAM访问。

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

https://stackoverflow.com/questions/16431278

复制
相关文章

相似问题

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