簡體   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