gpt4 book ai didi

c - 根据标准,这个 hack 是否有效?

转载 作者:太空狗 更新时间:2023-10-29 17:01:19 24 4
gpt4 key购买 nike

这就像 struct hack。根据标准 C 是否有效?

 // error check omitted!

typedef struct foo {
void *data;
char *comment;
size_t num_foo;
}foo;

foo *new_Foo(size_t num, blah blah)
{
foo *f;
f = malloc(num + sizeof(foo) + MAX_COMMENT_SIZE );
f->data = f + 1; // is this OK?
f->comment = f + 1 + num;
f->num_foo = num;
...
return f;

}

最佳答案

是的,这是完全有效的。如果可以避免不必要的额外分配(以及它们带来的错误处理和内存碎片),我强烈建议您这样做。其他人可能有不同的看法。

顺便说一下,如果您的数据不是 void * 而是您可以直接访问的数据,那么声明您的结构会更容易(并且更有效,因为它节省了空间并避免了额外的间接寻址)作为:

struct foo {
size_t num_foo;
type data[];
};

并为您需要的数据量分配空间。 [] 语法仅在 C99 中有效,因此为了与 C8​​9 兼容,您应该改用 [1],但这可能会浪费几个字节。

关于c - 根据标准,这个 hack 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3329598/

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