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

4

2 回答 2

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;
}
于 2013-10-08T22:16:38.450 回答
2

您既没有声明也没有定义对象。struct page_table因此,不会通过和 of的声明为对象保留存储空间pte

这个:

struct page_table{
  int a[512];
};

声明类型struct page_table

和这个:

typedef struct page_table pte;

pte为类型创建一个新名称struct page_table

于 2013-10-08T22:17:16.057 回答