引用海湾合作委员会文件(强调我的):
所述的malloc属性用来告诉仿佛任何非空指针返回不能别名任何其它有效指针的功能可被处理编译时该函数返回与该存储器有未定义的内容.这通常会改善优化.具有此属性的标准函数包括
malloc
和calloc
.realloc
类似函数没有此属性,因为指向的内存没有未定义的内容.
我有以下代码:
struct buffer {
size_t alloc; // Allocated memory in bytes
size_t size; // Actual data size in bytes
char data[]; // Flexible array member
};
#define ARRAY_SIZE <initial_value>
buffer *buffer_new(void) __attribute__((malloc))
{
struct buffer *ret;
ret = malloc(sizeof(struct buffer) + ARRAY_SIZE);
if (!ret)
fatal(E_OUT_OF_MEMORY);
ret->alloc = ARRAY_SIZE;
ret->size = 0;
return ret;
}
Run Code Online (Sandbox Code Playgroud)
现在,我在这里有点纳闷:虽然我没有初始化的data
成员,我仍然设置alloc
和size
字段以它们各自的值.我仍然可以将此分配的段视为"未定义的内容"并使用malloc属性吗?