2012-05-23 70 views
1

所以我想在模塊初始化時動態地分配一個緩衝區。緩衝區必須始終處於範圍內,因爲它存儲用戶空間程序與之交互的數據。因此,這裏是我的代碼:kmalloc:只分配4個字節

static char* file_data 
#define MAX_SIZE 256 
. 
. 
. 
{ 
    file_data = kzalloc(MAX_SIZE, GFP_KERNEL) 

. 
. 
. 
} 

然而,當我做sizeof file_data它總是返回4.我在做什麼錯?

編輯:緩衝區存儲來自用戶空間程序的輸入,但4個字符都是可以存儲的。

size_t read_file(char* __user buf, size_t count) 
{ 
    unsigned int len = 0; 
    len = copy_to_user(buf, file_data, count); 
    return count; 
} 

ssize_t write_file(char* __user buf, size_t count) 
{ 
    if(count >= MAX_SIZE) 
     return -EINVAL; 
    copy_from_user(file_data, buf,count) 
    return count; 
} 
+0

我想我正在學習什麼「動態分配」。我的假設是編譯器可以告訴我尺寸信息。我錯了。謝謝你們的答案! :) – Nathan

回答

4

file_data是一個指針。在32位平臺上,它的大小是32位或4個字節。你想知道的是的大小,file_data指向的數據。您不能使用sizeof運算符,因爲sizeof是編譯時操作。你不能在運行時動態分配的東西上使用它。

(再說,你已經知道了數據的大小指向file_data - 這是MAX_SIZE?)

3

char *file_data是指向一個char。顯然你是在32位系統上,所以任何指針都是4字節。編譯器(處理sizeof)不知道或在意爲file_data指定的內存分配了多少內存,它只是知道您要索引指針的大小(不管您是否指向或不指定)。如果你想要它指向的內存大小,你必須自己跟蹤它。

相關問題