假設存儲器爲操作被完美地對齊並T
是一個基本型(int
,float
,double
,ECT),這些操作的將是對在最大優化級別大多數編譯器更有效率? :分配鑄造指針或memcpy的
void *memory = ::operator new(sizeof(T));
*reinterpret_cast<T*>(memory) = some_func();
或
void *memory = ::operator new(sizeof(T));
T i = some_func();
std::memcpy(memory, &i, sizeof(T));
本能告訴我們,第一個會更快(不含臨時值存儲),但我敢肯定,一個現代化的編譯器將優化了這一點。我覺得好像第一個操作邏輯上更有意義(爲一個位置賦值),但不適用於需要複製多個值的較大數據集,但我只是想知道簡單的操作,比如我的例子。
編輯:
由於我自己的情況下,我絕不會故意做這樣的事情,但我有一個第三方的API,它提供了一個malloc
編輯緩衝區和所有我想要做的是修改前四個工作字節,以便在那裏放置一個整數值
第一個是扁平UB。記憶中沒有任何物體,你不能奇蹟般地假裝有一個。 –
唯一的「理智的」構造(並且擴展它)是':: new(memory)T(some_func());',但是爲什麼? –
@KerrekSB不,它不是。在'new'返回的地址中分配了內存,並且可以根據需要處理內存(只要分配了足夠的空間)。 – CoffeeandCode