簡體   English   中英

C ++獲取編譯代碼中使用的部分代碼的大小

[英]C++ get the size of a part of code used into the compiled code

有沒有辦法知道編譯后的可執行文件中的變量或對象使用了多少指令或資源?

例如,我想知道空std::vector<int>將在編譯的二進制文件中使用多少空間。

告訴編譯器生成程序集列表(編譯器/鏈接器選項,取決於您的編譯器和平台)。 然后用一次編譯它,一次沒有變量或對象。 比較兩個生成的列表中的行數。 這應該給你指令數量的差異。

編輯:由於各種優化,對齊,代碼重新排序,測量可能不是100%准確。 正如@Klaus指出的那樣,當超出內聯閾值並從更多來源產生更小的列表時,可能會看到悖論結果。

編輯:特別是與C ++模板有關,另請參閱我們可以通過C ++編譯器查看模板實例化代碼

(你提到“在編譯的可執行文件中”,所以我假設你問的是編譯時,而不是運行時)。

“C ++模板完整指南”一書(6.6.4章)的作者建議使用所謂的Tracer對象進行類似的目的。

這是報價:

“跟蹤器是一個用戶定義的類,可以用作要測試的模板的參數。通常,它只是為了滿足模板的要求而編寫,而不僅僅是那些要求。更重要的是,跟蹤器應該生成一系列在其上調用的操作。例如,這允許通過實驗驗證算法的效率以及操作的順序。“

跟蹤器對象的簡單示例:

#include <iostream>
#include <vector>

class TracerObject
{
public:
    TracerObject()
    {
       ++n_created;
    }
    ~TracerObject()
    {
       ++n_destroyed;
    }
    static int created_count(void)
    {
       return n_created;
    }
    static int destroyed_count(void)
    {
       return n_destroyed;
    }
    private:
    static int n_created;
    static int n_destroyed;
};

int TracerObject::n_created = 0;
int TracerObject::n_destroyed = 0;

int main(void)
{
   {
       std::vector<TracerObject> vector(2, TracerObject());
   }
   std::cout << "Constructor calls: " << TracerObject::created_count() << std::endl;
std::cout << "Destructor calls: " << TracerObject::destroyed_count() <<    std::endl;
    int i;
    std::cin >> i;
    return 0;
}

暫無
暫無

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

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