簡體   English   中英

變量名占用多少字節?

[英]How many bytes does the name of a variable take up?

char fooishness = 'f';

存儲f需要 1 個字節,但存儲fooishness需要多少個字節? 在哪里? 它是如何擴展的? 我讀過這個,但它沒有解決命名所需的空間。

如果我有一個字符數組,尋址數組是否需要比保存數據本身更多的存儲空間?

名稱對於 C++ 程序來說是短暫的:不管你如何命名事物,執行的代碼 [大部分] 保持不變。 很少有例外,名稱的性質實際上確實進入了程序的可觀察行為,例如,當使用std::type_info()時,它確實提供了對有點類似於類型名稱的實體的訪問。

雖然名稱不影響存儲的程序實體的大小,但無論它們是在堆上、堆棧上、全局 memory 還是嵌入在其他對象中的名稱都可能對程序本身產生大小影響:用於各種實體的名稱與經常(但不一定)影響程序運行大小的調試信息。 此外,外部引用實體的名稱可能最終被用於 linker 符號,尤其是在使用任何形式的共享對象時,以解決這些事物所指的內容。 然而,在所有這些情況下,名稱都是一個常數大小,以某種方式影響程序大小。

例子:

#include <iostream>

int main() {
    char fooishness = 'f';
    std::cout << fooishness << std::endl;
    return 0;
}

編譯后的可執行文件61,376 字節

    #include <iostream>

int main() {
    char fooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishness = 'f';
    std::cout << fooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishnessfooishness << std::endl;
    return 0;
}

編譯后的可執行文件61,376 字節

暫無
暫無

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

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