结构声明占用内存吗?

时间:2014-02-05 17:43:38

标签: c object structure

struct books
{
    char name[100];
    float price;
    int pages;
};

声明结构在不创建object的{​​{1}}的情况下,结构是否占用了内存空间structure

3 个答案:

答案 0 :(得分:6)

结构的定义通常不是C中二进制文件的一部分。它只存在于源代码中。

当编译器看到对结构的引用时(通常用于为此结构的实例分配或释放空间,通过对象变量访问其字段等),它会查询结构定义以了解正确的结构数字是针对该数据类型的(它主要是想要计算数据类型大小和字段偏移量)。

完成所有这些操作后,结构定义本身就会被遗忘,只有数字保存在程序中,无论它们在何处实际使用。

因此,如果你根本没有引用你的结构,那么就不应该存在它的痕迹。

答案 1 :(得分:2)

  

结构声明是否占用内存?

否 - 在堆栈,堆或共享内存上声明变量之前,您不会消耗内存。您只需定义一个由多种其他数据类型组成的新数据类型。

这会消耗内存:

const struct books myBooks = { ...initialization code... }; \\ Consuming CODE memory (typically ROM)

struct books myBooks = { ...initialization code... }; \\ Consuming DATA memory (typically RAM)

答案 2 :(得分:1)

没有。在已编译的程序类型中,声明/定义仅作为编译时概念存在。它们在编译的代码中不留痕迹,不会影响运行时内存消耗。 C程序中的存储由对象占用。类型不是对象。