![](/img/trans.png)
[英]Aligning an structure to reduce the cache hits?
我想改進以下結構的數據局部性: Output 有什么辦法可以使用packing和alignment來盡可能減少cache的命中次數? 我確實知道我計算機上緩存行的大小是 64,這是結構大小的一半(您可以使用命令sysctl hw.cachelinesize在macos上獲取此信息)。 如果有人知 ...
[英]Aligning an structure to reduce the cache hits?
我想改進以下結構的數據局部性: Output 有什么辦法可以使用packing和alignment來盡可能減少cache的命中次數? 我確實知道我計算機上緩存行的大小是 64,這是結構大小的一半(您可以使用命令sysctl hw.cachelinesize在macos上獲取此信息)。 如果有人知 ...
[英]align array elements differently in aligned union
我正在使用 SSE/AVX,我需要存儲對齊的數據。 然而,我的數據可以是不同類型的。 所以我使用這樣的聯合 我可以執行以下操作嗎? 所以我希望Ints32和Bool元素對齊為 4 個字節,而Int64元素對齊為 8 個字節。 因為Bar每個數組的第一個元素(或者基本上是&data )也應該對 ...
[英]Alignment of stack variables in Assembly Languages
是否有任何匯編指令來對齊特定的堆棧數據變量? 例如,假設 MASM function 具有這些具有初始值的局部變量 memory 堆棧具有此布局,但請注意endStack未對齊 為了對齊endStack ,我嘗試將局部變量與 alignment pad[4]混合在一起 正確對齊endStack ...
[英]Eigen::Map alignment of raw buffer
在使用 Eigen 庫時,我有一個模板化的 C++ class 包含一個原始緩沖區和一個 Eigen::Map 實例作為成員。 在 class 的構造函數中,我按如下方式初始化 map:template<int size> class TestEigenMapClass { publi ...
[英]Using the Operand-size override prefix 0x66 for instruction alignment
最近遇到了遺留的 0x66 操作數大小覆蓋。 是否可以在不顯式編寫單字節/多字節NOP 指令的情況下用於對齊指令? 例如添加align 16指令 生成此反匯編 刪除align 16並在mov rax,1前面加上重復的 0x66 忽略字節 生成此反匯編 0x66 alignment 技術是否有效且 ...
[英]Carving a struct memory layout "in stone"
也許這個話題已經被打死了,但我找不到任何“定論”的答案。 無論如何,我需要在 C++17 中指定一個普通的舊數據結構,它將作為“原始字節塊”從外部存儲器讀取/寫入/寫入。 這個外部存儲器內容必須“永遠”指定它的存儲器布局,而不管今天和未來幾十年有任何更改的編譯器設置、新的編譯器品牌或版本。 我目前正 ...
[英]Align assembly to end of 4K block
我有一些組裝。 我希望它位於 4K 塊的末尾。 目前該部分位於 0x1000003C0,我希望它位於 0x100003F80。 我嘗試使用p2align但它似乎沒有將它放在 4K 塊的末尾。 ...
[英]Compiler applies structure padding even though it's not needed
我試圖了解結構填充在 C 中的工作原理。特別是在 Linux x86-64 環境中。 為此,我重新安排了給定結構的成員順序,以查看是否在不需要時不應用填充。 但是,當我編譯並運行打印每個結構大小時的代碼時,對它們都應用了填充,即使第二個結構 ( struct b ) 的成員排列方式不會將它們連續存儲 ...
[英]SegFault due to an extended 64 bit variable
在將 32 位全局變量擴展到 64 位變量后,我試圖解決一個問題。 不幸的是,該程序因擴展的 64 位而崩潰。 當我比較生成的輸出 elfdump.txt 時,對於兩者:在全局變量擴展之前和之后生成的 elfdump.txt。 我發現程序頭現在是 6 個而不是 5 個擴展的 64 位變量,而當應用程 ...
[英]Space occupied by array of struct
關於數據 alignment 的《計算機系統:程序員的觀點》 (第 3 版(2015 年 10 月 6 日))一書的問題 3.44,我有一個問題。 問題: 對於以下每個結構聲明,確定每個字段的偏移量,即結構的總大小,對於 8 位 alignment:struct P1 {short i; int c ...
[英]Should I worry about structure alignment in C language when I write applications or it is done automatically?
我試圖了解結構 alignment 是否會影響我用 C 語言編寫的程序。 似乎它是為我們自動處理的東西。 問題是: 編寫應用程序時我應該擔心它嗎? 如果是,那么我到底應該什么時候擔心呢? ...
[英]How __align__ works in cuda C?
我正在練習 Array of Struct (AoS)的練習。 帶/不帶__align__的結構的定義如下:#ifdef TESTALIGN8 struct __align__(8) InnerStruct { float x; float y; }; #else struct I ...
[英]How to automatically pad bytes in a structure to a specific alignment?
例如,我有以下結構: 這種結構st的定義可能會隨着時間而變化(不能保證內部會定義什么...隨着開發的進行)。 有沒有辦法保證char y總是對齊——例如——一個 256 字節的邊界? 我想解決方案類似於添加如下數組: 是否有這樣一個keyword可以計算此結構中所有先前成員的總大小,從而有助於解決 ...
[英]How safe are unaligned pointers in modern .Net?
我需要從本機 memory 讀取/寫入一堆結構。 我想弄清楚我是否應該打擾 struct alignment。 這是我編寫的用於測試的簡單代碼。 它將一個壓縮結構寫入未對齊的指針,然后讀回該結構: 我在我手頭的幾個系統(使用.Net 6.0)上對此進行了測試,它在它們上運行沒有問題。 規范說值類型 ...
[英]Memory Alignment warning with gcc
我正在嘗試實現一個多態數據結構,例如一個侵入式鏈表(我已經知道內核有一個 - 這更多是學習經驗)。 問題是將嵌套結構強制轉換為包含結構會導致gcc發出內存對齊警告。 具體情況如下: 使用gcc tc -std=c99 -pedantic -fstrict-aliasing -Wcast-al ...
[英]Why is sizeof(my struct) smaller than I expected it to be?
在定義二叉樹的時候,我發現了一個問題。 例如,在這段代碼中,int變量占用4個字節,int變量有3個。 加上Node* lchild和Node* rchild ,不應該是 36 字節嗎? 我自己的想法是把lchild當作同一個節點結構,所以lchild里面也有12個字節,也就是三個int變量。 ...
[英]How to make contiguous data in class C++
我在 Windows 10 上使用 Visual C++。 我想讓Vector4類具有成員x, y, z, t並且它們連續存儲以提供operator[]和其他功能: 但我發現這樣的實現並不適用於每個編譯器(在 Visual C++ 上它運行良好)。 而且我不知道如何解決它,也許寫這樣的東西: c ...
[英]Unaligned access performance on Intel x86 vs AMD x86 CPUs
我已經實現了一個帶有結構內存布局數組的簡單線性探測哈希映射。 該結構包含鍵、值和指示條目是否有效的標志。 默認情況下,此結構由編譯器填充,因為鍵和值是 64 位整數,但條目僅占用 8 個布爾值。 因此,我也嘗試以未對齊訪問為代價打包結構。 由於更高的內存密度(我們不會在傳輸填充字節時浪費帶寬),我希 ...
[英]How to assemble an IDA-generated listing back into an identical executable?
我正在嘗試將 IDA 生成的程序集文件重新組裝回生成反匯編程序的實模式 16 位 MZ 可執行文件。 我正在使用 TASM: tasm /m2 你好 tlink你好 這給了我很多警告,在 IDA 生成“對齊”指令的行上顯示“段對齊不夠嚴格”消息: 程序組裝、鏈接甚至運行,但在終止時崩潰 ...
[英]How to structure data without bloating the size because of alignment?
假設我們有一個 struct Original是這樣的: 由於對齊, sizeof(Original)為 8 個字節。 4 用於 int,2 用於 bool,2 對齊“孔”。 但是當我決定,我想構建我的代碼,並且由於某種原因, x和y應該放在一起時,我可能想將此結構重構為: Origi ...