strdup linux,内存管理 – Linux内核API kstrdup
kstrdup函数功能描述:kstrdup( )函数的功能是为常量字符串s分配内存空间并将该字符串拷贝到所分配的地址空间中。
kstrdup文件包含
#include
kstrdup函数定义
在内核源码中的位置:linux-3.19.3/mm/util.c
函数定义格式:
char *kstrdup(const char *s, gfp_t gfp)
kstrdup输入参数说明
s:待分配内存空间的字符串。
gfp:分配模式,其取值及含义参考kmalloc( )函数的分析。
kstrdup返回参数说明
返回值指向为字符串所分配的内存空间的起始地址。
kstrdup实例解析
编写测试文件:kstrdup.c
头文件及全局变量声明如下:
#include
#include
#include
MODULE_LICENSE("GPL");
static int __init kstrdup_init(void);
static void __exit kstrdup_exit(void);
模块初始化函数:
int __init kstrdup_init(void)
{
char * temp;
const char *s = "hello world! "; //定义一个常量字符串
char * addr = kstrdup( s, GFP_KERNEL); //调用函数,分配模式为GFP_KERNEL
printk("addr = 0x%lx\n", (unsigned long)addr); //将字符串s拷贝到内存中的起始地址
printk("*addr = %c\n", *addr); //输出第一个字符
printk("*addr+4 = %c\n", *(addr+4)); //输出第五个字符
for(temp = addr; *temp ! ='\0'; temp ++) //循环地址中的字符值
printk("%c", *temp);
printk("\n");
return 0;
}
模块退出函数:
void __exit kstrdup_exit(void)
{
printk("exit ok! \n");
}
模块初始化及退出函数调用:
module_init(kstrdup_init);
module_exit(kstrdup_exit);
实例运行结果及分析:
首先编译模块,执行命令insmod kstrdup.ko插入模块,然后执行命令dmesg -c,会出现如图所示的结果。
结果分析:
该测试程序中定义了一个常量字符串char * s = “hello world! ",将其作为参数传递给kstrdup( )函数,目的是为该字符串分配一个内存空间,并将其拷贝到该内存空间中。然后输出addr的值可看到所分配的内存空间的起始地址,再输出地址偏移为0和4处的内容,依次为’h’和’o',最后循环输出地址中的字符值,为“hello world! ”,可知原字符串已经被分配空间,并且成功完成拷贝。
strdup linux,内存管理 – Linux内核API kstrdup相关推荐
- Linux内存管理Linux Memory Management Notes
Linux 内存基础 地址类型 linux内核中有许多种不同的地址类型 用户虚拟地址 用户空间看到的常规地址,通过页表可以将虚拟地址和物理地址映射起来 物理地址 用在cpu和内存之间的地址叫做物理地址 ...
- MySQL 调优基础:Linux内存管理 Linux文件系统 Linux 磁盘IO Linux网络
http://www.cnblogs.com/digdeep/category/739915.html
- 高端内存映射之kmap持久内核映射--Linux内存管理(二十)
日期 内核版本 架构 作者 GitHub CSDN 2016-09-29 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 在内 ...
- Linux内存管理 (4)分配物理页面
专题:Linux内存管理专题 关键词:分配掩码.伙伴系统.水位(watermark).空闲伙伴块合并. 我们知道Linux内存管理是以页为单位进行的,对内存的管理是通过伙伴系统进行. 从Linux内存 ...
- linux内存段页,linux内存管理-段式和页式管理
该博文参考国嵌视频和http://www.cnblogs.com/image-eye/archive/2011/07/13/2105765.html,在此感谢作者. 一.地址类型 物理地址:CPU通过 ...
- Linux内存管理之slab 2:slab API
Linux内存管理之slab 2:slab API 0. 前沿/须知: 1. kmem_cache_create 1.1 kmem_cache_create (仅分配一个kmem_cache实例)未分 ...
- Linux内核分析(三)----初识linux内存管理子系统
原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...
- 关于linux内存管理相关的内核参数
最近闲来无事,就打算整理一下linux内存管理相关的内核参数,以便以后查阅使用.在整理的过程中除了参考内核文档Document/sysctl/vm.txt之外,更多的是参考网上的各位大神写的资料,大部 ...
- 万字整理,肝翻Linux内存管理所有知识点【Linux内核开发人员必学】都是精髓
Linux的内存管理可谓是学好Linux的必经之路,也是Linux的关键知识点,有人说打通了内存管理的知识,也就打通了Linux的任督二脉,这一点不夸张.有人问网上有很多Linux内存管理的内容,为什 ...
- Linux内存管理初探
linux内存是后台开发人员,需要深入了解的计算机资源.合理的使用内存,有助于提升机器的性能和稳定性.本文主要介绍linux内存组织结构和页面布局,内存碎片产生原因和优化算法,linux内核几种内存管 ...
最新文章
- Python 类对象及属性内置方法 classmethod、delattr、dir、hasattr、getattr、callable
- SQL中CONVERT转化函数的用法
- c语言 中insert变量值,c – 在VS2010中的vector :: insert执行意外结果
- 1、请简述DNS的作用,并说明当你输入网址“www.nxtc.edu.cn“按下回车后,DNS是怎么工作的?(关键步骤可以给出相应图示) 2、详细描述域名劫持攻击的过程及防御方式。
- R语言观察日志(part1)--subset函数
- 注入点批量收集工具_原来微信群也是能够批量管理的,学到了
- 生成器案例,#采集日志
- HTTPS协议的简述
- AIR Android开发--APK结构详解
- Linux面试题(34道)
- ARM交叉编译工具链
- gg修改器修改内购_GG入门学习第六课:GG的防闪
- EditText实现输入自定义表情
- 【BI工具支持的数据源对照表(帆软/PowerBI/永洪/观远)】
- Codeforces Global Round 8
- Servlet.service() for servlet SpringMVC threw exception ---- java.lang.NullPointerException
- 【JZOJ4883】【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰
- 力回馈方向盘测试软件,真假如何辨?力反馈方向盘深度剖析
- 22下教师资格证面试备考攻略
- 【超实用】爬取2000+免费PPT模板(新手向)
热门文章
- 上面两点下面一个三角形_【人人都能欣赏的数学证明】为什么三角形的三个内角相加是180度?...
- .desktop 桌面快捷_两个按键:手机截屏且保存至电脑桌面
- 水利工程中计算机软件用到什么,水利工程设计中计算机技术的应用论文
- Vue教程20:Vuex入门
- Oracle中ORACLE_SID,INSTANCE_NAME,DB_NAME几个名词的区别
- 【Selenium】1.介绍 Selenium
- sqool导出oracle数据
- 虚拟目录下apache点击报The requested URL* was not found on this server.
- 在向服务器发送请求时发生传输级错误。
- 通过 Socket 实现 TCP 编程入门