[C语言] 使用数组模拟实现堆

2023-12-17 12:41:34

?代码如下, 只能模拟实现malloc但是无法实现free, 这里只是随便写写如果是只使用一次这么写也对.

为什么使用longlong类型强转, 因为在VC编译器中, longlong类型是8个字节, 64位电脑内存地址也是8字节, 只能用这个来进行运算, 如果是32位机器, 那么使用int就行了.

#define _CRT_SECURE_NO_WARNINGS

/*
    使用数组模拟实现堆开辟空间
*/

#include <stdio.h>
#define NULL 0

char heap_buf[1024]; //堆区大小
void* blockedPos = heap_buf; //堆区空闲指针

void* my_malloc(unsigned char size)
{
    void* pret = blockedPos;
    if ((long long)blockedPos + size >= &heap_buf + 1)
    {
        return NULL;
    }
    blockedPos = (long long)blockedPos + size;
    return pret;
}

void my_free(void* pos)
{
    blockedPos = pos;
}

void arrInput(int data[])
{
    for (int i = 0; i < 10; i++)
    {
        data[i] = i;
    }
}

//打印数组
void arrOutput(int data[])
{
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", data[i]);
    }
}

int main(void)
{
    int* ptemp = (int*)my_malloc(10);
    if (ptemp == NULL)
        return 1;

    arrInput(ptemp);
    arrOutput(ptemp);

    my_free(ptemp);

    return 0;
}

文章来源:https://blog.csdn.net/qq_46129738/article/details/135042041
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。