我写过这个非常小的程序。我想检查是否实际分配了内存。
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编译器。
答案 0 :(得分:3)
不,由于示例中编写的结构,没有分配堆或堆栈内存。
printf
将在格式化和输出字符串时在内部分配内存,如果不使用寄存器,sizeof(pte)
编译时编号可能在堆栈调用期间分配内存
在C中,要在堆栈上分配内存:
int main()
{
struct page_table p;
return 0;
}
并且,在C中,要在堆上分配内存:
int main()
{
struct page_table* p = malloc(sizeof(struct page_table));
...
free(p);
return 0;
}
答案 1 :(得分:2)
您既不是声明也不是定义对象。因此,通过声明struct page_table
和pte
此:
struct page_table{
int a[512];
};
声明类型struct page_table
。
而且:
typedef struct page_table pte;
为类型pte
创建新名称struct page_table
。