by dengwei3010 - 移动操作系统 - 2011-02-15 20:35:49 阅读(609) 回复(0)
How to install the tracing functionality — Function: void mtrace (void) When the mtrace function is called it looks for an environment variable named Malloc_TRACE. This variable is supposed to contain a valid file name. The user must have write access. If the file already exists it is truncated. If the environment variable is not set or it does not name a valid file which can be opened for writin...
pud_t *pud = pud_alloc(&init_mm, pgd, address); 上面代码中参数pgd,address都是线性地址,函数pud_alloc应该是设置全局目录中某一项,全局目录项中存放的是物理地址,但是参数中根本没有物理地址,这是怎么回事呢?
malloc()与 alloc() C语言跟内存分配方式 (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。程序在运行的时候用...
想问一下,alloc_pages这个函数在内核中是怎么使用的?和kmalloc,vmalloc有什么区别呢?最重要的一点是alloc_pages是分配哪里的内存,类似于低端内存,高端内存之类的。 请谁能解释一下。
kernel 2.6.11,__alloc_pages内部调用了函数zone_watermark_ok():[code]int zone_watermark_ok(struct zone *z, int order, unsigned long mark, int classzone_idx, int can_try_harder, int gfp_high) { /* free_pages my go negative - that's OK */ long min = mark, free_pages = z->free_pages - (1 << order) + 1; int o; if (gfp_high) min -= min / 2; if (can_try_harder) min -= min / 4; if (fr...
本帖最后由 wangzhen11aaa 于 2011-09-23 17:36 编辑 [code] typedef strcut pglist_data{ zone_t node_zones[MAX_NR_ZONES]; zonelist_t node_zonelists[NR_GFPINDEX]; struct page *node_mem_map; ..... struct pglist_data *node_next; }pg_data_t; [/code][code] typedef struct zonelist_strcut { zone_t *zones[MAX_NR_ZONES + 1]; int gfp_mask; }zonelist_t; [/code]分配策略为NR_GFPINDEX 0x100种。 貌似所有...
本帖最后由 chenshko 于 2011-09-15 10:00 编辑 在netfilter中构建nskb失败 跟踪发现是alloc_skb失败,一下内核所记录的函数调用栈日志,求高人分析下alloc_skb失败的可能原因。 内核打印了meminfo信息,难到跟swap内存空间的大小有关?[code]Sep 14 12:24:10 localhost kernel: swapper: page allocation failure. order:0, mode:0x20 Sep 14 12:24:10 localhost kernel: Pid: 0, comm: swapper Not tainted 2.6.29.6NFQ #18 ...
alloc_bootmem 在mem_init 之前 分配内存 内核应该是看不到 也就是不会管理 我想问下 我往这块内存写东西 写完之后 重启 内核 为什么信息会没有了? 我查了下在alloc_bootmem 分配成功之后会把内存清0 现在我已经把我分配给我的那段内存跳过清 0 可是重启 后 东西还是没有了 ?? 请问这是为什么??
有个应用需要频繁的申请100k--500k的内存, 而且只会申请100k, 200k, 300k, 400k, 500k,申请出来的内存可能使用时间从少于1秒到最多30秒, 那么应该直接使用malloc -- free函数还是需要个内存池更好点?
#include linux/module.h> #include linux/init.h> #include asm/atomic.h> #include linux/gfp.h> #include linux/mm.h> #include linux/string.h> #define err(msg) printk(KERN_ALERT "%s\n", msg) static int main_init(void) { struct page *page; void *address; char data[] = "hello linux"; page = alloc_pages(GFP_KERNEL, 0); if (!page) { err("all...