2015-06-27 42 views
-3

我想在c中使用mmap()來映射內存。運行下面的代碼後,打印1,因爲的sizeof(void *的)爲1,那麼如何才能知道我們沒有得到1234個字節的內存sizeof mmap在c中,我們如何知道我分配了多少內存

void *heap_region = NULL; 

heap_region = mmap(NULL, 1234, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); 
printf("%lx",sizeof(*heap_region)); 
+0

你想達到什麼目的?我們從這個開始。 – Elyasin

+0

這真的甚至編譯? –

+0

你爲什麼試圖爲此目的使用'sizeof'?僅僅因爲它有「大小」和「的」呢?不,'sizeof(void *)'通常不是1.你的代碼甚至不會嘗試評估sizeof(void *)'。它試圖評估'sizeof(void)',這在C中是非法的。 – AnT

回答

0

如果呼叫成功,這意味着你得到了(在至少)你要求的1234字節。
如果返回的指針不是MAP_FAILED,則知道調用成功。 所以你可以說

if(heap_region == MAP_FAILED) { 
    fprintf(stderr, "mmap failed: %s\n", strerror(errno)); 
    exit(1); 
} else { 
    printf("mmap succeeded: %p\n", heap_region) 
    ... 
} 
+0

由'mmap'返回的失敗值是'MAP_FAILED',而不是'0'。 – Celada

+0

事實上,'0'可以是'mmap()'的一個成功返回值。 (並不經常,但是在正確的情況下。)我編輯了帖子以使用正確的錯誤值。 – duskwuff

+0

感謝您的糾正,我很感激。 (學到了一些東西!) –

相關問題