Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 结构声明是否占用内存?_C_Object_Structure - Fatal编程技术网

C 结构声明是否占用内存?

C 结构声明是否占用内存?,c,object,structure,C,Object,Structure,声明结构而不创建结构的对象,该结构是否会占用内存中的数据成员空间?结构的定义通常不是C中二进制文件的一部分。它只存在于源代码中 当编译器看到对您的结构的引用时(通常用于分配或取消分配此结构实例的空间,通过对象变量访问其字段等),它会参考您的结构定义,以了解该数据类型的正确数字(主要用于计算数据类型大小和字段偏移) 当所有这些都完成后,结构定义本身就被遗忘了,只有数字被保存在程序中,不管它们在哪里被实际使用 因此,如果您根本不引用结构,那么就不应该存在它的痕迹 结构声明是否占用内存 否-在堆栈、堆

声明结构而不创建
结构的
对象
,该结构是否会占用内存中的
数据成员空间?

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

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

当所有这些都完成后,结构定义本身就被遗忘了,只有数字被保存在程序中,不管它们在哪里被实际使用

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

结构声明是否占用内存

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

这将消耗内存:

const struct books myBooks={…初始化代码…};\\消耗代码内存(通常为ROM)


struct books myBooks={…初始化代码…};\\消耗数据内存(通常为RAM)

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

否(想想这意味着什么),但我不确定这是否有效。在哪个内存中?很抱歉,太迂腐了,但编译的程序占用了一些内存,源代码也占用了一些内存memory@AlexT:我的意思是,当我声明一个
结构
而不创建该结构的任何
对象
时,它是否为其
数据成员
不,它不会占用堆栈、堆或静态存储中的内存
对象
是一个OO概念。您是否通常将C
结构
称为
对象
?@bblincoe:在C语言术语中,对象不是OO概念。对象是一个左值,一个存储区域。C中的每个左值都是一个对象,不管它是不是一个结构实例或不。当你在C中声明了代码> int i;< />代码>,<代码> i <代码>是一个对象。(此外,C++对象的“对象”思想完全相同。”这与OO无关。谢谢你的澄清。
struct books
{
    char name[100];
    float price;
    int pages;
};