Question

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?

Was it helpful?

Solution

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).

OTHER TIPS

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.

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)

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.

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.

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top