繁体   English   中英

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

[英]Storing control information alongside allocated memory. Is it portable?

简而言之,我们尝试编写一些分配例程(类型为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]);

稍后,用户将传递在分配过程中返回的指针,而我们要访问控制信息。

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;
   }

以上访问合法且可移植吗?

是的,应该很好,这是一种常见的技术。

几点:

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 *指针存储返回的值。

更新 :正如评论中指出的那样,这将忽略对齐(这很安全,因为您说非控制数据是unsigned char数组),这在一般情况下可能是个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM