LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1222|回复: 7

如何动态取得以页对齐的大块内存

[复制链接]
发表于 2005-3-18 15:12:09 | 显示全部楼层 |阅读模式
我想用malloc的,可是发现他给的内存区不是以页对齐的,在linux应是4096字节。
我是否应该自己写个mymalloc函数,或者内核提供了这样的系统调用?
请帮我。
发表于 2005-3-18 16:26:21 | 显示全部楼层
这么做的目的是什么?
回复 支持 反对

使用道具 举报

发表于 2005-3-18 18:45:33 | 显示全部楼层
按页对齐太浪费空间了吧。你申请一个字节,系统至少得给4k。。。相信内存的利用率实在高不到那儿去。
你实在要想这样做,就自己实现malloc函数。每次都把地址的低12位变成0就4k对齐了。
回复 支持 反对

使用道具 举报

发表于 2005-3-19 12:18:52 | 显示全部楼层
共享内存是页对齐的,不过分配一次最少一页。
回复 支持 反对

使用道具 举报

发表于 2005-3-20 09:28:55 | 显示全部楼层
mmap的内存也是按页对齐的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-21 15:34:27 | 显示全部楼层
Post by doubleelec
这么做的目的是什么?

这么做的动机其实是这样的,因为mmap返回的内存区是以页对齐的。
但是我使用SDL编程时,发现SDL创建的overlay的内存区是用malloc方法获取的。
所以最后我不得不使用memcpy在这两块内存区进行操作。
于是我想修改SDL的源代码以满足我自己的要求。
回复 支持 反对

使用道具 举报

发表于 2005-3-24 20:00:39 | 显示全部楼层
不好意思 刚刚看到消息
这个函数 好象可以memalign(4096,4096*20)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-25 09:37:55 | 显示全部楼层
Post by nuclearweapon
不好意思 刚刚看到消息
这个函数 好象可以memalign(4096,4096*20)

多谢了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表