2013-10-08 78 views
2

我已經寫了這個非常小的程序。我想檢查內存是否實際分配。內存分配沒有創建對象

struct page_table{ 
    int a[512]; 
}; 
typedef struct page_table pte; 
int main(){ 
    printf("size of pte = %d\n",sizeof(pte)); 
    return 0; 
} 

我的問題是,我沒有創建一個struct pte的對象。我只是在宣佈它。 sizeof我的結構顯示2048.但我想知道是否實際內存將分配在物理內存,因爲我還沒有創建此結構的對象。我正在使用gcc編譯器。

回答

3

不,沒有堆或棧內存分配由於在您的示例中寫的結構。

printf將在內部分配內存而格式化,並輸出該串和sizeof(pte)編譯時數可能如果使用不寄存器堆棧上的呼叫期間分配內存。

在C語言中,爲內存在棧上分配:

int main() 
{ 
    struct page_table* p = malloc(sizeof(struct page_table)); 
    ... 
    free(p); 

    return 0; 
} 
+0

謝謝Johann Gerell – CHID

+0

請注意,如果編譯器發現「p」未被使用,它可能不會爲變量分配內存。例如,您可以通過打印其地址來強制執行此操作。 –

2

你既不聲明也不定義:

int main() 
{ 
    struct page_table p; 

    return 0; 
} 

而且,在C,爲內存在堆中分配一個東西。因此,通過聲明struct page_tablepte,不存儲對象。

此:

struct page_table{ 
    int a[512]; 
}; 

聲明類型struct page_table

這:

typedef struct page_table pte; 

的類型struct page_table創建了一個新的名字pte

+0

謝謝@ouah – CHID