堆或堆栈结构中的静态数组?

Static array in struct on heap or stack?

假设您有一个静态数组作为 struct

的属性
   struct example {

           char array [5];

};

struct example* exp  = (struct example*)malloc(sizeof(struct example));

...初始化等等...

现在struct中的静态数组算在堆上还是栈上?此外,与动态分配的数组相比,在结构中拥有指定大小的数组是否更有效,即分配后指向动态内存的指针,分配时间的属性?最后,如果它在堆栈上,堆栈是否会在释放结构时立即消除变量?

在您的代码中,struct example 的大小为 5 个字节,其中包含字符数组。使用 malloc 命令,您已经分配了 5 个字节,其中包含完整的结构。 malloc 将从堆中分配内存。字符数组 array 是分配内存的前(也是唯一)5 个字节。

鉴于这是少量内存,您可能只需要一个堆栈变量来保存它而不是从堆中分配。如果您仅在函数运行期间使用它。在这种情况下,你可以简单地去:

struct example  exp;

现在这只是堆栈上的一个结构,因此在分配它时没有开销。当然,如果这是一个巨大的结构,那么这样做就不是那么明智了。

您正在使用 malloc 函数分配内存。
因此,使用 malloc 函数为任何变量或结构分配内存时,它只会在堆中分配内存。 你声明一个变量"a",这是结构体的成员。所以,在这里你没有分配内存。您只需声明一个结构。 之后你使用malloc分配内存,这里只会在堆中分配内存。

数组是结构的一部分。结构在哪里,数组就在里面

如果使用堆,则与分配可变大小数组没有区别。事实上,您可以增加分配的大小,它会给您更多 space 数组。例如。如果分配 10 个字节,则可以使用数组中的 10 个元素 - array[0] 到 array[9]。反过来,如果您只分配 2 个字节,您仍然可以使用数组的 2 个元素 - array[0] 和 array[1]。因此,您指定的数字 5 仅对 sizeof() 重要。

当然,如果你把它当成栈中的局部变量,那就完全不一样了