gpt4 book ai didi

c - 将分配给堆栈和数组的大小。数组内存分配是在堆栈下还是单独分配

转载 作者:行者123 更新时间:2023-11-30 14:57:03 26 4
gpt4 key购买 nike

int capacity =4;
struct Stack* stack =
(struct Stack*) malloc(sizeof(struct Stack));
stack -> capacity = capacity;
stack -> top = -1;
stack -> array = (int*) malloc(stack -> capacity * sizeof(int));

将分配给堆栈和数组的大小。数组内存分配是在堆栈下还是单独分配。

最佳答案

关于大小的唯一明确的声明是,stack 指向的内存将为 sizeof(struct Stack),而指向的内存为 >stack->array 将是 4 * sizeof(int)。 (假设malloc()没有分配内存失败,在这种情况下它返回NULL)。

sizeof(struct Stack) 是实现定义的 - 这意味着它在编译器、编译器设置、主机系统等之间有所不同。sizeof(int) 也是实现定义的。

实际上,sizeof(struct Stack)至少其成员的大小总和。编译器可能会在成员之间引入额外的填充。填充量因编译器而异。 (这是简单的解释 - 更完整的解释将涉及每种类型的对齐要求)。

除非所有成员都是 charunsigned charsigned char 类型(其大小为 1) > 根据定义),或这些类型的数组,它们的大小是实现定义的。

两个不同 malloc() 调用返回的地址之间也没有保证关系。它们可能“在一起”(例如,在内存中紧接着另一个),但它们也可能完全分开。

关于c - 将分配给堆栈和数组的大小。数组内存分配是在堆栈下还是单独分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44181743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com