将控制信息与分配的内存一起存储。它是便携式的吗?

时间:2013-10-07 16:53:32

标签: c malloc

非常简单地说,我们正在尝试编写一些分配例程(unsigned char类型),其中每个已分配的块都有一些与之关联的控制信息。我们不是要编写一个完整的内存管理器,但有一些特定的要求

我们的控制结构样本

typedef struct _control_data
{
   u8 is_segment;
   :
   :
   :
   struct _control_data* next;
}control_data;

当用户为大小40调用alloc时,我们将分配

  unsigned char* data_ptr = (unsigned char*)malloc(sizeof(control_data) + size);
  return(&data_ptr[sizeof(control_data]);

稍后用户将传递在alloc期间返回的指针,并且我们想要访问控制信息。

void do_some_processing(unsigned char* data_ptr)
   {
      struct control_data* c_ptr = (data_ptr - sizeof(control_data));
      c_ptr->is_segment = TRUE;
      c_ptr->next       = NULL;
   }

以上访问权限是否合法且便携?

1 个答案:

答案 0 :(得分:1)

是的,它应该没问题,是一种常用的技术。

几点:

void * my_alloc(size_t size)
{
    control_data *cd = malloc(size + sizeof *cd);
    if(cd != NULL)
      return cd + 1;
    return NULL;
}

+ 1将做正确的事情,但更简单。使分配“打字”也没有意义;让它返回void *并将其留给调用者使用unsigned char *指针来存储返回的值。

UPDATE :正如评论中指出的那样,这会忽略对齐(因为你说非控件数据是unsigned char的数组,这感觉很安全)这可能是一个问题。一般情况。