你可以将较小尺寸的结构放入更大的内存块中吗?

时间:2011-08-01 23:53:32

标签: c memory data-structures malloc

我有这个结构:

typedef struct
{
int data[10];
} small_structure;

和这段代码:

small_structure *s_struct;
void * chunk;

chunk = malloc(1000);
s_struct = chunk;

可以这样做吗?忽略这是浪费记忆的事实。

3 个答案:

答案 0 :(得分:4)

是的,只要有足够的内存,分配更多的内存总是合法的。

答案 1 :(得分:2)

是的,没关系。 malloc将返回适当的对齐记忆。但是,只需将任意void *指针分配给small_structure *变量即可。这意味着您的具体示例很好,但是类似于:

int function(void *p)
{
    small_structure *s = p;
    return s->data[0];
}

不是!如果p没有针对small_structure *指针进行适当的对齐,那么您只会导致未定义的行为。

答案 2 :(得分:2)

AFAICT,它没有任何问题(废物除外; - )。

请注意,在使用之前,您必须使用有用的数据填充结构。