0

register関数の引数に指定子を適用するポイントは何ですか。次のコードは有効です。

#include <iostream>

using std::cout;

struct A
{
    A(){ cout << "A\n"; } 
    ~A(){ cout << "~A\n"; }
};

void foo(register A a)
{
}

int main()
{
    cout << "first line\n";
    foo(A());
    cout << "last line\n";
}

register指定子が関数パラメータに適用されるのはなぜですか?

4

1 に答える 1

2

registerは、K&R C にまでさかのぼる古いキーワードです。その目的は、オーバーヘッドがあったメモリからデータをロードおよびアンロードする代わりに、変数をプロセッサ レジスタとして保持するようコンパイラに示唆することでした。この変数に非常に頻繁にアクセスする場合、レジスターとして宣言するときに保存した 1 つまたは 2 つの命令は、当時は非常に価値がありました。

それ以来、コンパイラはコードを最適化するのが得意になり、このキーワードはその目的を失いました。とにかくコンパイラにそれを使用するように指示しない限り、ほとんどの実装で無視されます。

于 2014-07-11T19:01:41.260 に答える