2013-12-09 33 views
0

我正在閱讀flex_string的源代碼,並且不太明白爲什麼對齊是必要的,只是出於性能原因?爲什麼loki :: flex_string的SmallStringOpt需要對齊

union 
{ 
    mutable value_type buf_[maxSmallString + 1]; 
    Align align_; 
}; 

這裏是flex_string的設計文檔的鏈接:

http://www.drdobbs.com/generic-a-policy-based-basicstring-imple/184403784#4

對筆者說: 但是那是什麼對齊的公司嗎?那麼,在處理這種「坐位分配」時,您必須小心對齊問題。

+0

指維基百科,**數據對齊意味着將數據放在內存偏移量等於字大小的某個倍數的位置,這會由於CPU處理內存的方式而提高系統的性能**我認爲這是唯一的原因這裏。 – stepinto

回答

0

從鏈接的文章引用:

但是那是什麼對齊的公司嗎?那麼,在處理這種「坐落 分配」時,您必須小心對齊問題。由於 不是便攜式方式,用於確定存儲對象要求存儲 具有哪些對齊要求,SmallStringOpt接受指定對齊的類型,並將 存儲在對齊align_變量中。

我相信這是關於存儲模板參數。爲了儘可能通用,即使該容器對其元素具有一定的對齊要求,該類仍嘗試與任何容器一起工作。這可能是出於性能方面的原因,也可能是與某個架構的兼容性。重點是,沒有可靠的便攜式方法來確定任何「存儲」最終的對齊要求。

因此,參數對齊意圖是某種類型,其大小等於存儲所需的對齊。它是工會中的虛擬變量 - 它永遠不會被寫入或讀取。只有它的大小被使用。

從代碼可以看出,小字符串大小是配置的最大值和對齊值中較高的一個,使得對齊成爲最小可配置的小字符串大小。

希望這會有所幫助!

+0

非常有幫助,謝謝! – stepinto