Struct's contribution to type size

自闭症网瘾萝莉.ら 提交于 2019-12-05 22:00:38

问题


I am wondering why the following two types

struct {
    double re[2];
};

and

double re[2];

have the same size in C? Doesn't struct add a bit of size overhead?


回答1:


No, it just merely composes all the elements into one higher-level element whose size is merely the individual elements' sizes added up (plus some padding depending on alignment rules, but that's out of the scope of this question).




回答2:


Not if it can help it - no. C avoids overhead like the plague. And specifically, it avoids overhead in this context.

If you used a different structure, you might see a difference:

struct space_filled
{
    char       part0;
    double     part1;
};

If your machine requires double to be aligned on an 8-byte boundary (and sizeof(double) == 8, which is normal but not mandated by the standard), then you will find that the structure occupies 16 bytes.




回答3:


Nope, the struct doesn't have to add anything. Unlike in Java or .NET, where classes (and structs) have a bunch of other responsibilities, in C and C++, they are simply containers used to hold a number of data members. In C++, they may have to store a vtable to resolve virtual function calls if any exist, but in general, no, a struct itself has no overhead.

The one exception is this:

typedef struct {} empty;
assert(sizeof(empty) > 0);

The size of an empty struct will not be zero. A struct has to have some nonzero size since every object has to have a unique address. (Otherwise you wouldn't be able to create an array of these structs)




回答4:


No. Struct does not add any size, or have any overhead in the compiled C.

It is a layer of syntax that requires additional work by the compiler, but has no overhead at runtime.

C is an extremely "naked" language, meaning that nothing is there unless required. So ask yourself, "What overhead does a struct REQUIRE?", and you won't find any.




回答5:


No it doesnt.

That's one of the good points of structs (why they were so helpful in old school TCP/IP programming).

It's a good way to represent the memory/buffer layout.




回答6:


no the struct type in C just sequentially layout the members in memory




回答7:


sometmes, see: http://en.wikipedia.org/wiki/Sizeof



来源:https://stackoverflow.com/questions/1020481/structs-contribution-to-type-size

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!