2017-01-12 73 views
0

我一直認爲std::tuple是一些奇特的東西,但效率並不高。問:std :: tuples/std :: array

但我瞭解到元組是連續的內存,因爲rules of object layout。我知道tuples是通過繼承生成的,這就是爲什麼我們不能有動態tuples。但在這一點上,這意味着tuples是瘋狂的好std::array它可以包含任何類型沒有任何缺點。

對我來說似乎有點過於強大。

所以我想知道,tuples裏面的內存tuples真的沒有其他問題嗎?


由於其清除自己心中的答案,我得到了一個大問題

是一個「大」結構(真的不能在這裏寫一個大的)像

struct Foo { 
    int a; 
    float b; 
    double c; 
}; 

爲緩存比像陣列友好

std::array<double, 3> 

我需要經常訪問一個元素並進行更改。所以我想知道一臺計算機是否會像緩存數組一樣容易地在緩存中保存一個大結構。


反正感謝

+1

[std :: tuple memory alignment]可能重複(http://stackoverflow.com/questions/14597006/stdtuple-memory-alignment) –

回答

1

我一直在想的std ::元組是一些幻想,但不是真的有效。

正如你現在所知,這是無稽之談。元組通常與具有相同成員的常規類一樣高效。

我知道元組是通過繼承生成的,這就是爲什麼我們不能擁有動態元組。

繼承是實現元組的一種(典型)方法。你不能擁有動態元組,因爲std::tuple是一個模板。模板在編譯時被實例化。

但在這一點上,這意味着元組是瘋狂的好std::array它可以包含任何類型沒有任何缺點。

比較數組和元組就像比較蘋果和橙子。能夠構造多種類型的元組同樣具有缺點,因爲它是一個優點。數組和元組用於不同的事物。

更適合的比較是用普通的類結構,具有相同的成員。元組的主要優點是它可以通過模板參數生成。元組的主要缺點是你不能命名成員。

所以我想知道,內存裏面的元組怎麼樣?

取決於元組是如何實現的。在實踐中,它通常與具有相同成員的班級佈局非常相似。但不一定完全相同。具體而言,成員在記憶中的順序可能會或可能不會顛倒。

確實沒有其他元組問題?

你問的其他的問題,但你沒有證明他們有任何問題。元組有他們的利基,他們是有用的。如果您嘗試在有用的環境之外使用它們,那麼您可以發現問題。

是一個像緩存友好的數組結構嗎?

元組,其他類和數組都非常相似。它們都是子對象(成員)的平坦容器。他們每個人都像對方一樣友好而不偏不倚緩存。

+0

感謝您的時間,我真的很難理解元組。用你所說的話我可以提出最後一個問題:是一個像緩存一樣的大型結構嗎?就像我應該有更多的答案谷歌,謝謝。 –

+0

@MathieuVanNevel將新問題添加到您的問題文章。 – user2079303

+0

@MathieuVanNevel請參閱編輯。 – user2079303