簡體   English   中英

描述這個元程序的內存消耗

[英]Describe the memory consumption of this metaprogram

我在一本關於元編程的書中找到了這個工作代碼 -

template<unsigned long N>
struct binary
{
    static unsigned const value = binary<N/10>::value *2 + N%10;    
};

template<>
struct binary<0>
{
    static unsigned const value = 0;
};

int main()
{
    unsigned x = binary<101010>::value;
    cout << x;
}

我的問題是 - 分配value的內存在哪里? 是否在數據段上分配?

此外,該書還說這段代碼導致了一系列模板實例化,它們以類似於遞歸的方式計算結果。 這是否意味着每個模板實例化,在數據段上分配新的unsigned

value沒有定義。 這樣的靜態數據成員只能以不要求它們具有地址的方式使用(它們不能被使用 )。 它們的值將被內聯,就好像你unsigned x = 42;

當然, 編譯器必須以某種方式實例化所有模板特化並計算binary<101010>::value 但是編譯完成后再也沒關系了。

如果你使用一個好的C ++編譯器,任何地方都不會分配任何內存。 C ++編譯器將完全優化掉這個類,並在任何使用它的代碼中直接使用計算出的常量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM