?代码如下, 只能模拟实现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;
}