没有创建对象的内存分配

时间:2013-10-08 22:11:11

标签: c gcc

我写过这个非常小的程序。我想检查是否实际分配了内存。

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编译器。

2 个答案:

答案 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_tablepte

,不会为对象保留存储空间

此:

struct page_table{
  int a[512];
};

声明类型struct page_table

而且:

typedef struct page_table pte;

为类型pte创建新名称struct page_table