memory-alignment

    2熱度

    3回答

    我試圖通過使用#pragma pack (n)來調整數據成員。採取以下爲例: #include <iostream> using namespace std; #pragma pack(8) // or (16) struct A { int a; char b; char c; char d; char e; char f;

    6熱度

    2回答

    我今天遇到了很多麻煩,跟蹤了一個真正逃避腐敗的錯誤。 我想如果我真的注意到了警告,我不會很難找到它,但是因爲我沒有找到相關信息,說明爲什麼這個特定的警告彈出,我讓它滑動,這是一個錯誤。 因此,這裏的牽連警告的Visual Studio 2013給我: warning C4316: object allocated on the heap may not be aligned 16 並將它傳遞的

    2熱度

    3回答

    我有一組32位寄存器用於嵌入式應用程序(ARM裸機)中的外設,並具有以下字節地址。 CTL 0x0; STAT爲0x4 TXR 0x8中< - 間斷地址 RXR爲0x20 DAT1的0x30 < - 間斷地址 DAT2 0x40的< - 間斷地址 等 我希望將所有這些註冊到一個C結構(它的一個結構) struct my_peri { uint32_t CTL; uint32_t

    1熱度

    1回答

    我必須將浮點寄存器保存到堆棧中。 我試着用fsave指令。 我做到以下幾點: fsave (%esp) 但是作爲參數FSAVE使用16字節對齊的地址。 我不知道如何使%esp中的地址爲16字節對齊。

    2熱度

    1回答

    Microsoft編譯器似乎生成x64代碼,其中包含與16個字節對齊的函數(而不是數據),即除了目標文件中的最後一個函數以外,每個函數都使用0xCC填充其代碼(中斷指令,大概是爲了更容易的調試)直到下一個16字節邊界。 這是爲什麼?它實際上是否提高了性能?如果是這樣,怎麼樣?直覺上,我會預料如果有什麼它應該略微降低性能緩存的原因。

    1熱度

    2回答

    我想強制一個特定的堆分配返回一個64字節對齊的地址,因爲這是一個緩存行邊界。我想我可以做這樣的 int *p = new alignas(64) int; 但沒有我的編譯器似乎給p這是64的倍數的地址,這裏是我如何檢查: #include <iostream> int main() { int *p = new alignas(64) int; std::cout <

    1熱度

    1回答

    考慮下面的代碼: import os import numpy as np import tables as tb # Pass the field-names and their respective datatypes as # a description to the table dt = np.dtype([('doc_id', 'u4'), ('word', 'u4'),

    4熱度

    2回答

    我有結構的靜態數組: struct CommandStruct { char* data; unsigned ans_size; }; static const CommandStruct commands[] = { { "Some literal", 28 }, { "Some other literal", 29 }, { "Yet

    5熱度

    2回答

    在以下鏈接中:http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx,據說「簡單地讀取和寫入正確對齊的32位變量是原子操作」。我想知道,如果在一個C++程序中,所有的32位變量默認都是正確對齊的。換句話說,有些情況下32位變量不能正確對齊。

    0熱度

    1回答

    我被修改C++的概念,但我堅持一個非常簡單的代碼 #include <iostream> using namespace std; class foo { public: //int i; void virtual foobar() { cout << "foobar\n"; } }; int main() { foo