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

时间:2016-09-22 03:15:38

标签: c pointers memory-address dereference pointer-arithmetic

我正在尝试将一个堆空间块初始化为几个较小的固定大小的块,而不使用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++;
    }

1 个答案:

答案 0 :(得分:0)

你的想法存在一些含糊之处(你没有提供有关实现malloc的想法的许多细节)。无论如何,当你写

时,你犯了一个错误
dynamic_address=(&dynamic_address+0x800)

原因应该是:

dynamic_address = dynamic_address + 0x800