[英]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;
}
以上访问合法且可移植吗?
是的,应该很好,这是一种常见的技术。
几点:
malloc()
的返回值 。 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.