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