免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6637 | 回复: 5
打印 上一主题 下一主题

关于kmalloc分配空间对齐的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-02 09:41 |只看该作者 |倒序浏览
两个问题:
1、内核使用kmalloc申请的空间,默认是多少字节对齐的;
2、如果要申请特定对齐大小的内存空间,比如要申请128字节对齐的内存空间,如何去做;
还请各位大侠帮助,谢谢!!!

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
2 [报告]
发表于 2011-12-02 11:27 |只看该作者
都是8字节对齐并包含一个8字节的头。 不清楚是否可以盛情特定对齐大小

论坛徽章:
0
3 [报告]
发表于 2011-12-02 11:53 |只看该作者
谢谢斑竹回复,8字节对齐是怎么看出来的呢,我看源码没看出来,是在哪里设置的呢

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
4 [报告]
发表于 2011-12-02 12:11 |只看该作者
本帖最后由 crazyhadoop 于 2011-12-02 12:16 编辑

slab.h里面

int align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);

#ifdef ARCH_DMA_MINALIGN
#define ARCH_KMALLOC_MINALIGN ARCH_DMA_MINALIGN
#else
#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
#endif

仔细看了下,貌似是32  1<<5.

论坛徽章:
0
5 [报告]
发表于 2011-12-02 13:27 |只看该作者
谢谢斑竹回复,align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);好像是slob.c中的吧,slab中初始化cache是按照ARCH_KMALLOC_MINALIGN对齐来分配的,但是通过kmalloc分配时不一定就使用那么大的空间啊,我觉得是不是在kmalloc中指定的,可是又找不到

论坛徽章:
0
6 [报告]
发表于 2011-12-02 20:02 |只看该作者
在内核中kmalloc其实是基于slab机制实现的,分配的字节大小为32的倍数,最大为128k

static cache_sizes_t cache_sizes[] = {
        {    32,        NULL, NULL},
        {    64,        NULL, NULL},
        {   128,        NULL, NULL},
        {   256,        NULL, NULL},
        {   512,        NULL, NULL},
        {  1024,        NULL, NULL},
        {  2048,        NULL, NULL},
        {  4096,        NULL, NULL},
        {  8192,        NULL, NULL},
        { 16384,        NULL, NULL},
        { 32768,        NULL, NULL},
        { 65536,        NULL, NULL},
        {131072,        NULL, NULL},//128k
        {     0,        NULL, NULL}
};
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP