c/c++语言开发共享GCC:__ attribute __((malloc))

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

malloc属性用于告诉编译器可以将函数视为其返回的任何非NULL指针在函数返回时不能将任何其他指针作为别名,并且内存具有未定义的内容 。 这通常会改善优化。 具有此属性的标准函数包括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  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; } 

现在我有点困惑:虽然我没有初始化data成员,但我仍然将allocsize字段设置为各自的值。 我仍然可以将此分配的段视为“未定义的内容”并使用malloc属性吗?

    使用__attribute__((malloc))标记buffer_new函数是安全的,因为它返回的块不包含指针。

    最新的GCC文档阐明了__attribute__((malloc))的含义:由如此标记的函数返回的块不得包含任何指向其他对象的指针 。 目的是帮助编译器估计哪些指针可能指向同一个对象:该属性告诉GCC它不必担心你的函数返回的对象可能包含指向它正在跟踪的其他东西的指针。

    这是来自Ubuntu论坛代码审查的链接,是的,文档需要改进https://bugs.launchpad.net/ubuntu/+source/gcc-4.7/+bug/1123588

    需要了解更多c/c++开发分享GCC:__ attribute __((malloc)),也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享GCC:__ attribute __((malloc))相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979102.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐