簡體   English   中英

C ++非靜態成員函數的開銷

[英]C++ Non-static member functions overhead

如果我們有以下課程,我想知道:

class MyClass  
{
public:
  MyClass(...)  
  type nonstatic_func1(...);
  type nonstatic_func2(...);
  ...
  type nonstatic_func10(...);
private:
  type var1;
  type var2;
  ...
  type var10;
};

MyClass每個實例都將具有自己的十個函數集(即,對於每個實例,將創建十個函數中的每個函數的“版本”)嗎? 在類定義中擁有20個函數(相對於擁有2個函數(非靜態)),特別是在實例化方面,以及在處理這些實例時,將對性能產生多少影響? 多少變量會影響性能? (請參閱下一段, vector部分)

我問的原因是我正在編寫一個實例化一個類的許多實例的程序(例如,我有一個很大的向量,例如vector<MyClass> vec ),並且該程序的運行速度比我預料到了。

簡而言之,我想知道在實例化和使用具有大量非靜態函數/變量的類的實例時需要多少開銷。

編輯

我用大量的類實例向量做的一件事是排序...這是我懷疑會浪費性能的主要內容,因為在元素之間和之間有很多移動(顯式和隱式地復制)元素(實例)向量。 顯然,如果必須大量移動和復制的數據塊很大,則可能會降低性能。

每個MyClass實例都會有自己的十個函數集嗎

沒有。

在類定義中擁有20個函數(相對於擁有2個函數(非靜態)),特別是在實例化方面,以及在處理這些實例時,將對性能產生多少影響?

因此,沒有。

多少變量會影響性能?

具有許多成員變量的主要影響是每個實例占用大量內存空間。 尺寸較大的結果是復制時會花費大量時間。 不太明顯的時間開銷是在CPU緩存中。

但是這些開銷可能不是造成問題的原因。

我用大量的類實例向量做的一件事是排序...這是我懷疑會降低性能的主要內容

不要懷疑 測量。 要跟蹤性能在哪里,找出瓶頸在哪里。

暫無
暫無

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

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