struct books
{
char name[100];
float price;
int pages;
};
声明结构在不创建object
的{{1}}的情况下,结构是否占用了内存空间structure
?
答案 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程序中的存储由对象占用。类型不是对象。