[問題] malloc() 計算引數用的複雜運算式原理
問題(Question):
各位前輩好,我在某個網站上( http://ppt.cc/5WQt )看到了處理二維陣列方法
但是不了解以下程式碼
int pad = (h*sizeof(void*)+15)/16*16 - h*sizeof(void*);
這串的目的是什麼,看他們的討論好像和記憶體align相關,但是看不懂...Orz
如果可以的話煩請前輩們指點迷津
謝謝前輩們的指點 :)
程式碼(Code):(請善用置底文網頁, 記得排版)
void* malloc2d( int w, int h, int size )
{
int j;
int pad = (h*sizeof(void*)+15)/16*16 - h*sizeof(void*);
void **a = (void**) malloc( h*sizeof(void*) + pad + w*h*size );
for( j=0; j<h; j++ )
a[j] = ((char *)(a+h)) + pad + j*w*size;
return a;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.214.89
→
07/25 15:40, , 1F
07/25 15:40, 1F
→
07/25 15:42, , 2F
07/25 15:42, 2F
謝謝前輩,我瞭解大概的意思了
想再請問為什麼加入
(h*sizeof(void*)+15)/16*16 - h*sizeof(void*)可以剛好相差16的整數倍?
h*sizeof(void*) + 15 再除以 16 * 16 ,再減掉 h*sizeof(void*) 這裡不了解...Orz
謝謝前輩指導 :)
※ 編輯: andy2007 來自: 140.114.214.89 (07/25 16:00)
→
07/25 16:07, , 3F
07/25 16:07, 3F
→
07/25 16:08, , 4F
07/25 16:08, 4F
推
07/25 22:20, , 5F
07/25 22:20, 5F
→
07/25 22:21, , 6F
07/25 22:21, 6F
→
07/25 22:22, , 7F
07/25 22:22, 7F
謝謝前輩,我又更了解這串程式碼的意思了
想再請問這裡的 "a必為16之倍數" 是怎麼成立的?
我把30(b)代入:( 30 + 15 )/(16*16) 不會等於 32(a) 耶...
是我哪裡用錯了嗎?
謝謝前輩出手相救 :)
※ 編輯: andy2007 來自: 140.114.214.89 (07/26 02:38)
→
07/26 03:05, , 8F
07/26 03:05, 8F
→
07/26 03:06, , 9F
07/26 03:06, 9F
→
07/26 08:59, , 10F
07/26 08:59, 10F
推
07/26 10:14, , 11F
07/26 10:14, 11F
→
07/26 10:14, , 12F
07/26 10:14, 12F
→
07/26 10:42, , 13F
07/26 10:42, 13F