簡體   English   中英

如何初始化和操作地址指針

[英]How to initialize and manipulate an address pointer

我正在嘗試將一個堆空間塊初始化為幾個較小的固定大小的塊而不使用malloc。 每個塊指向下一個塊。 基本上,它是一個家庭滾動鏈表,不使用malloc。 結構看起來像這樣:

/******** Memory Table Entry Data Structure**********/
typedef struct
{
    ????? block_address;  //<- What datatype should I use here?
    void* next_free_block;

}mem_table_entry_t;

/******** Memory Table Data Structure**********/
typedef struct
{
    mem_table_entry_t two_kib[8];

}mem_table_t; 

鏈接器通過外部變量_sys_memory使程序可以使用堆的起始地址,如下所示:

extern void* _sys_memory;   // Start of system memory

在我的初始化例程中, 我想創建一個指針,並指向與_sys_mem相同的地址。 稍后,我想將指針遞增2048並將該值賦給下一個塊的起始地址。 我應該使用什么樣的數據類型以及如何操作它?

#include <stdint.h>
#include "mem_manager.h"

mem_table_t memory_table;

void mem_initialize(void)
{
    int block_count = 0;

    void *dynamic_address;

    dynamic_address = _sys_memory;

    while(block_count < 8)
    {

        memory_table.two_kib[block_count].block_address = dynamic_address;
        dynamic_address = (&dynamic_address + 0x800);

        memory_table.two_kib[block_count].next_free_block = dynamic_address;
        block_count++;
    }

你的想法有些含糊不清(你沒有詳細介紹實現malloc的想法)。 無論如何,你在寫作時犯了一個錯誤

dynamic_address=(&dynamic_address+0x800)

因為它應該是:

dynamic_address = dynamic_address + 0x800

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM