簡體   English   中英

Memory 用於結構向量中的自定義結構函數

[英]Memory use for custom struct functions in vector of structs

我有一個結構,例如這個:

struct TMyStruct {
    int v1;
    std::string abc;

    TMyStruct() { Init(); }

    void Init() {
        v1 = 1;
        abc = "text";
        }
    }

std::vector<TMyStruct> ms;
ms.push_back(TMyStruct());
// ... etc.

它工作得很好。

我擔心的是 - 上述結構是否使用更多 memory 因為在這種情況下(但可能是其他任何東西)在向量中分配時初始化的附加函數? 或者我應該使用沒有任何附加功能的結構,例如:

struct TMyStruct {
    int v1;
    std::string abc;
    }

std::vector<TMyStruct> ms;
ms.push_back(TMyStruct());
ms.back().v1 = 1;
ms.back().abc = "text";
// etc...

成員函數(不包括需要指向虛函數指針表的指針的虛函數)不會影響 class 的大小。

成員函數不會花費任何額外的 memory,除非其中至少一個被聲明為虛擬的,在這種情況下,您將支付指向虛擬 memory 表的額外指針,以及一些恆定數量的 ZCD69B4957F06CD82917BF3D61980E 表本身。

如果您將更長的字符串分配給abc ,那么與沒有自定義構造函數的相同結構相比,您的構造函數在 memory 使用方面的成本會更高。

最后,與沒有構造函數的版本相比,您的構造函數在運行時開銷方面的成本會更高一些,但在實踐中並不明顯。

成員函數不影響 class 實例的大小。 特別是在您的情況下,導致您額外的 function 不是虛擬的,並且您沒有涉及 inheritance。 如果您引入 inheritance 和虛函數,則會出現小尺寸懲罰,因為在這種情況下 class 的任何實例都將包含指向 vTable 的額外指針。

所以,長話短說,你的結構沒有使用更多的 memory 因為你使用了額外的 init function。

暫無
暫無

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

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