[英]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.