自制OS中简易malloce存疑:传入size=0仍正常工作求解答
关于自制OS中简易malloce实现调用size=0仍能读写的问题分析
先看你贴的这段malloce代码,它完全不是一个符合规范的内存分配实现,核心问题如下:
- 这个函数不管传入的
size参数是多少,都会固定返回地址0x100000,没有任何动态分配内存的逻辑,也没有内存块管理的机制——本质上只是返回了一个固定的内存地址,和“分配”毫无关系。 - 当调用
malloce(0)时,for循环的条件i < 0不成立,循环体完全不会执行,函数直接返回0x100000。 - 你后续能正常读写0-9的数组内容,只是因为
0x100000开始的内存区域在你的自制OS环境中是可读写的。你相当于直接在这块固定内存上做了越界操作(因为你传入的size是0,但实际使用了更多内存),这和函数的“分配”行为无关——哪怕传0,函数还是给了你这个固定地址,而你的OS恰好允许访问这块内存。
补充说明:标准C中malloc(0)的返回值是实现定义的,可能返回NULL,也可能返回一个不可解引用的非NULL指针,但绝对不会允许直接在返回的地址上读写数组。你现在用的这个实现完全不符合规范,只是一个模拟了返回地址的空架子。
内容的提问来源于stack exchange,提问作者Enes
相关产品推荐
相关产品推荐

