gpt4 book ai didi

c++ - 是否可以禁止对一小段 C++ 代码使用某些寄存器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:12 26 4
gpt4 key购买 nike

我看过this question已经,但由于以下原因,这两种解决方案都不适合我。

  1. 我正试图阻止 C++ 代码接触寄存器,而不是汇编,所以 clobber 列表将不起作用。
  2. 我想在本地而不是全局执行此操作,因此全局显式寄存器变量太笨重了。

是否可以通过某种方式包装一组 C++ 语句来告诉编译器不要使用某些寄存器?

最佳答案

当然不是以便携的方式。 C++ 语义层对这个寄存器一无所知(尽管有一个 register 关键字)。

g++ 然而例如can allocate a register globallylocally到一个变量,在这种情况下,编译器将永远不会触及该寄存器。这有时很有用(我已经在 VM 中使用它实现了 Lisp 实现的显着性能提升,而无需手动编写汇编中的所有内容)。

我当然怀疑,除非您还重新编译所有标准库,更改标准 header 以包含库中的代码可以触及寄存器的声明(并且根据 ABI,可能声明了您要使用的寄存器“从头开始”,因此不会保存和恢复)。

可能其他编译器也有此选项(clang 然而,例如尽管几乎与 g++ 兼容,但支持寄存器分配)。

关于c++ - 是否可以禁止对一小段 C++ 代码使用某些寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39695703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com