我有一個鏈接的結構列表。比方說,我將x百萬個節點插入鏈表, 然後遍歷所有節點以找到給定值。C++結構:成員越多,成員訪問時間越慢?
奇怪的是(至少對我來說),如果我有這樣的結構:
struct node
{
int a;
node *nxt;
};
那麼我可以遍歷槽列表並檢查在10倍速度的值進行比較時,我有另一名成員的結構,像這樣:
struct node_complex
{
int a;
string b;
node_complex *nxt;
};
我也使用C風格的字符串(char數組)試了一下,結果是一樣的:只是因爲我有其他成員(串),全迭代(+值檢查)慢了10倍,即使我甚至沒有碰過那個成員!現在,我不知道結構的內部結構如何工作,但它看起來像一個高昂的代價...
有什麼收穫?
編輯: 我是一個初學者,這是我第一次使用指針,因此機會是,這個錯誤是我的一部分。我會盡快發佈代碼(現在不在家)。
更新: 我再次檢查了值,我知道看到一個更小的差異:2x而不是10x。 肯定更合理。
儘管昨天也是這樣,昨天晚上我太累了,我不能分兩個數字,我只是做了更多的測試,結果令人興奮。
的次爲一相同數量的節點是:
- 一個int和一個指針來迭代波谷的時間是0.101
- 一個int和一個字符串:0.196
- 一個int和2字符串:0.274
- 一個int和3字符串:0.147(!!!)
- 對於兩個整數,它是:0.107
看看結構中有多於兩個字符串時會發生什麼!它變得更快!有人將LSD放入我的咖啡?沒有!我不喝咖啡。
這對我的大腦來說太方便了,所以我想我會自己弄清楚,而不是在這裏排除公共資源。 (Ad:我不認爲我的分析班是越野車,無論如何,我可以用我自己的眼睛看到時間差異)。
無論如何,謝謝你的幫助。 乾杯。
您確定這是您測量的純迭代時間,不包括列表元素的創建時間嗎?創建一個字符串比創建一個int要昂貴得多。你有嘗試過兩個'int'字段嗎? – 2010-09-24 10:43:07
請發佈鏈接列表結構的代碼 – 2010-09-24 10:43:32
@PéterTörök:我確定。創建時間不包含在測量中。我還沒有嘗試過兩個int字段,但會。 – 2010-09-24 10:44:31