相关疑难解决方法(0)

GCC:__ attribute __((malloc))

引用海湾合作委员会文件(强调我的):

所述的malloc属性用来告诉仿佛任何非空指针返回不能别名任何其它有效指针的功能可被处理编译时该函数返回与该存储器有未定义的内容.这通常会改善优化.具有此属性的标准函数包括malloccalloc.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成员,我仍然设置allocsize字段以它们各自的值.我仍然可以将此分配的段视为"未定义的内容"并使用malloc属性吗?

c malloc attributes gcc

9
推荐指数
1
解决办法
5559
查看次数

标签 统计

attributes ×1

c ×1

gcc ×1

malloc ×1