簡體   English   中英

如何在C中分配32字節對齊的內存

[英]How to allocate a 32-byte aligned memory in C

在采訪樣本之一中遇到了這個問題。 如何僅使用標准庫分配對齊的內存,已經回答了16字節對齊的分配

但是,我對用於將最后4位清零的掩碼也有一個特定的問題。 使用此掩碼“〜0F”使得結果地址可以被16整除。對於32字節對齊/可除性,應該怎么做才能實現相同的效果?

首先,您提到的問題是16字節對齊,而不是16位對齊。

關於您的實際問題,您只想屏蔽5位而不是4位以使結果32字節對齊。 因此它將是~0x1F

澄清一下:

要將指針對齊到32字節邊界,您希望地址的最后5位為0。(由於100000是32位二進制,因此32的任何倍數都將以00000結尾。)

0x1F是11111(二進制)。 由於它是一個指針,因此實際上是一些0,后跟11111-例如,對於64位指針,它將是59 0和5 1。 〜表示這些值是相反的-因此〜0x1F為59 1,后跟5 0。

當您使用ptr & ~0x1F ,按位&導致與'ed'的所有位保持相同,並且將與'ed'的所有位設置為0。因此,最終得到原始值的ptr,除了將最后5位設置為0。這意味着我們減去了0到31之間的某個數字,以使ptr為32的倍數,這就是目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM