c - GCC: __attribute__((malloc)) -
quoting gcc documentation (emphasis mine):
the malloc attribute used tell compiler function may treated if non-null pointer returns cannot alias other pointer valid when function returns and memory has undefined content. improves optimization. standard functions property include
malloc,calloc.realloc-like functions not have property memory pointed not have undefined content.
i have following code:
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; }   now i'm bit puzzled here: though didn't initialize data member, still set alloc , size fields respective values. can still consider allocated segment of "undefined content" , use malloc attribute?
it safe mark buffer_new function __attribute__((malloc)), because block returns contains no pointers.
the latest gcc documentation clarifies meaning of __attribute__((malloc)): block returned function marked must not contain pointers other objects. intention compiler estimate pointers might possibly point same object: attribute tells gcc needn't worry object function returns might include pointers else it's tracking.
Comments
Post a Comment