设计内存分配和释放两个函数

1. 设计内存分配和释放两个函数:要求仅适用malloc实现任意字节对齐的内存分配和释放,函数原型如下:

    void *aligned_malloc( unsigned int size, unsigned int align );

    void aligned_free( void *ptr );

void * aligned_malloc(unsigned int size, unsigned int align)
{
	//预先分配一块够用的内存,但是内存开始地址不一定是align的倍数
	void* ptr = malloc(size + align);

	if (ptr)
	{
		//把内存使用部分的开始地址设为align的倍数,实现对齐功能
		void* aligned = (void*)(((long)ptr + align) & (~(align - 1)));
		//为了释放完整释放分配的内存,保留完整内存的开始地址
		((void**)aligned)[-1] = ptr;

		return aligned;
    }
    return(NULL);
}
void aligned_free(void* ptr)
{
    free(((void**)ptr)[-1]);
}


参考资料:http://blog.csdn.net/china_video_expert/article/details/7269847



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(说明:此压缩包内有本人的实验报告和实验程序,还附赠了自己在网上下载的一份资料和程序!绝对超值!本人此报告成绩优秀,参考绝对不让你后悔) 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 1.要求首先采用动态分区方案,用最先适用算法对作业实施内存分配,然后把作业地址空间的某一逻辑地址转换成相应的物理地址。能够处理以下的情形:输入某一逻辑地址,程序能判断地址的合法性,如果合法,计算并输出相应的物理地址。如果不能计算出相应的物理地址,说明原因。 2.设计报告内容应说明: ⑴ 课程设计目的与功能; ⑵ 需求分析,数据结构或模块说明(功能与框图); ⑶ 源程序的主要部分; ⑷ 测试用例,运行结果与运行情况分析; ⑸ 自我评价与总结: i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正; iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他的其他方法(如果有,简要说明该方法); v)对实验题的评价和改进意见,请你推荐设计题目。 目录 课程设计任务书 一 设计目的 二 问题描述 三 功能描述及分析 四 关键技术与方法 4.1动态分区分配 4.1.1动态分区基本思想 4.1.2分区分配中的数据结构 4.1.3动态分区分配算法 4.1.4内存的回收 4.2动态分区重定位 4.2.1重定位的定义 4.2.2动态重定位的实现 4.2.3动态重定位分区分配算法 4.3内存信息的保护 4.3.1上界/下界寄存器 4.3.2基址/限长寄存器 4.4内存地址转换 4.4.1逻辑地址 4.4.2物理地址 4.4.3地址映射 五 需求分析、数据结构及模块说明 5.1需求分析 5.2数据结构 5.3模块说明 5.4主要算法框图 5.4.1最先适应法设计框图 5.4.2进程的删除与回收框图 5.4.3地址转换程序框图 六 源程序的主要部分(伪代码) 6.1有关内存分配算法 6.2有关内存删除回收函数 6.3有关地址转换函数 七 测试用例、运行结果与运行情况分析 7.2输入报错提醒 7.3初始分配内存 7.4 内存的删除与回收 7.5用最先适应法分配接下来的内存 7.6地址转换 7.6.1输入合法的逻辑地址 7.6.2输入非法的逻辑地址 八 自我评价与总结 九 致谢 十 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值