[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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!