寄存器变量 我有一个C++代码,它包含大量递归。我正在考虑对变量使用register类。您认为这样做可以节省堆栈内存并提高性能吗

寄存器变量 我有一个C++代码,它包含大量递归。我正在考虑对变量使用register类。您认为这样做可以节省堆栈内存并提高性能吗,c++,recursion,C++,Recursion,谢谢 Sameer不,我认为这可能根本没有效果。现代编译器通常比人类更擅长安排寄存器的使用,并且可能会忽略“register”关键字 话虽如此,找到答案的唯一真正方法是编写一些代码,并使用register关键字测量其性能,而不使用register关键字-代码更改是微不足道的。您可以将算法更改为只使用std::stack和一些自定义类,这些类将包含算法的状态,而不是函数堆栈和递归调用。如果我请正确记住,register关键字并不保证变量将存储在寄存器中,但表示它可以并且如果可能的话应该使用寄存器。

谢谢


Sameer

不,我认为这可能根本没有效果。现代编译器通常比人类更擅长安排寄存器的使用,并且可能会忽略“register”关键字


话虽如此,找到答案的唯一真正方法是编写一些代码,并使用register关键字测量其性能,而不使用register关键字-代码更改是微不足道的。

您可以将算法更改为只使用
std::stack
和一些自定义类,这些类将包含算法的状态,而不是函数堆栈和递归调用。

如果我请正确记住,register关键字并不保证变量将存储在寄存器中,但表示它可以并且如果可能的话应该使用寄存器。然而,如果寄存器不可用,那么它仍然会在堆栈上结束


<>微软C++忽略关键字,并自行决定。我会首先查看您的算法以获得性能提升。

编译器将百分之百地满足您的
注册请求。当然,如果您设法将一个或两个局部变量压缩到寄存器中,您可能会节省堆栈空间,但是(当然)如果这些值需要在调用之间保留,那么它们将需要再次放在堆栈中。

我敢打赌编译器不会满足您的请求。假设您有一个局部变量,并且递归调用该函数100次。如果要尊重所有的自动变量“register”关键字,则仅该变量就需要100个硬件寄存器(所有变量在第100次调用时都处于活动状态)


性能是一个难题。分析程序真正花费时间的地方,并尝试在那里进行优化,但要谨慎:有些决策可能以没有收益告终,有些决策可能以较差的性能告终。正如前面提到的,编译器确实擅长于他们所做的事情。将一个变量强制放入寄存器意味着剩余变量使用的寄存器少了一个。

有没有办法确定编译器是否接受了对寄存器变量的请求?@sameer:分析程序集,但是,如果方法很复杂,那么这不是一项简单的任务。这不会提高性能,但会明显减少堆栈溢出问题。