当内存空间被保留为struct?

问题描述:

内存空间保留在声明后面的结构或当我们创建该结构的对象?当内存空间被保留为struct?

struct student 
{ 
    int marks; 
    float average; 
}; 
+1

我认为这取决于您是否使用数据。 – 0x499602D2 2013-04-22 01:39:28

+1

当你实例化一个对象时它被保留。即用'学生'声明一个变量;'将保留内存,就像'student * s = new student()'一样;但是写下你所做的只是定义了类型,它不会保留内存,因为没有创建变量。 – nonsensickle 2013-04-22 01:44:06

+0

从技术上讲,在C++中,你应该使用类。类和结构一样工作,但增加了一些功能,如模板。 C++具有结构的唯一原因是与旧C程序的向后兼容性 – refi64 2013-04-22 02:17:09

当您声明struct时,您没有为该结构分配内存。但是,你可以声明一个struct定义类型的变量向右走,像这样:

struct student 
{ 
    int marks; 
    float average; 
} var_name; // Reserves the memory in the global/static space 

您还可以定义在自动空间(局部变量)或与new动态空间变量。

通常它应该是当你创建一个定义。既然你可以声明一个结构的实例而不定义它(可能在头文件中带有extern),除非定义它,否则没有空间将用于实例。

但是,如果编译器没有实际使用,编译器可以选择将对象从程序中除去。有时候,编译器可能会非常热心并剥夺根本没有被引用的对象,但实际上会执行重要的操作,比如某种注册。