數據對齊的問題在另一篇文章中,我問了一個編碼問題,並在源代碼中對這個問題,我宣佈以下列方式一些變量:從堆棧中分配 - 在C
char datablock[200];
char *pointer1=datablock;
char *pointer2=datablock+100;
然而有人指出,代碼可能與64位系統不兼容,因爲100不能被8整除?我不記得那是什麼。
但我想要做的是保留一大塊內存用於我的程序,並使其儘可能快地執行,我記得因爲系統緩存內存的工作方式,使用來自同一塊內存比使用獨立塊的數據更快。使用malloc也會要求更慢的內存。
所以在代碼中,這是我想要做的一個例子。我要分配40000個字節,並給4個指針訪問每個10,000字節:
char data[40000];
char *string0=data;
char *string1=data+10000;
char *string2=data+20000;
char *string3=data+30000;
然而,這不是我想要做的,因爲我相信不同的存儲部分將被訪問:
char string0[10000];
char string1[10000];
char string2[10000];
char string3[10000];
我相信我的想法是正確的,但我唯一需要關注的是對於64位系統,偏移值是8的倍數,對於32位系統,偏移值是4的倍數?
我不想挑選錯誤的數字並收到分段錯誤。
*「但是有人提到代碼可能與64位系統不兼容,因爲100不能被8整除?」*有人錯了。 – Ryan
如果您將該內存用於「char」以外的項目,則只會出現問題。例如,如果將「int」或「double」項放入該內存中,可能會出現問題。 – user3386109
XY問題?你真的想要達到什麼?正如@ user3386109所述,除非您嘗試錯誤地將這些數組用作數據類型,否則應該沒有問題。如果你要緩存垃圾,你需要更具體,並提供更多的細節。 – Olaf