c - Allocate Pointer and pointee at once -
if want reduce malloc()
s (espacially if data small , allocated often) allocate pointer , pointee @ once.
if assume following:
struct entry { size_t buf_len; char *buf; int something; };
i allocate memory in following way (don't care error checking here):
size_t buf_len = 4; // size of buffer struct entry *e = null; e = malloc( sizeof(*e) + buf_len ); // allocate struct , buffer e->buf_len = buf_len; // set buffer size e->buf = e + 1; // buffer lies behind struct
this extende, whole array allocated @ once.
how assess such technuique regard to:
- portability
- maintainability / extendability
- performance
- readability
is reasonable? if ok use, there ideas on how design possible interface that?
you use flexible array member instead of pointer:
struct entry { size_t buf_len; int something; char buf[]; }; // ... struct entry *e = malloc(sizeof *e + buf_len); e->buf_len = buf_len;
portability , performance fine. readability: not perfect enough.
extendability: can't use more 1 member @ time, you'd have fall explicit pointer version. also, explicit pointer version means have muck around ensure correct alignment if use type doesn't have alignment of 1
.
if thinking i'd consider revisiting entire data structure's design see if there way of doing it. (maybe way best way, have think first).
Comments
Post a Comment