当前位置:  开发笔记 > 编程语言 > 正文

我可以用g ++控制寄存器分配吗?

如何解决《我可以用g++控制寄存器分配吗?》经验,为你挑选了1个好方法。

我有一个高度优化的C++片段,即使在远离热点的地方进行微小的改动也可以达到20%的性能.经过深入调查后发现,热点中使用的寄存器(可能)略有不同.我可以使用always_inline属性控制内联,但是我可以控制寄存器分配吗?



1> Nils Pipenbr..:

如果你真的想搞乱寄存器的分配,那么你可以强制GCC在某些寄存器中分配本地和全局变量.

您可以使用如下特殊变量声明执行此操作:

 register int test_integer asm ("EBX");

适用于其他体系结构,只需将EBX替换为目标特定的寄存器名称即可.

有关这方面的更多信息,我建议您查看gcc文档:

http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/Local-Reg-Vars.html

我的建议是,除非你有充分的理由,否则不要乱用寄存器分配.如果您自己分配一些寄存器,那么分配器可以使用较少的寄存器,并且您可能最终得到的代码比您开始使用的代码更糟糕.

如果您的函数性能至关重要,那么在编译之间获得20%的性能差异,那么在内联汇编程序中编写该函数可能是个好主意.


编辑:正如strager指出的那样,编译器不会强制使用寄存器来表示变量.如果完全使用变量,它只被强制使用寄存器.例如,如果变量不能在优化过程中存活,则不会使用它.该寄存器也可用于其他变量.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有