iOS学习(C语言)知识点整理

一、内存管理

1)malloc , 用于申请内存; 结构void *malloc(size_t),需要引用头文件<stdlib.h>;在堆里面申请内存,size_t,表示申请空间的大小,单位是字节;如果申请成功,返回这段内存的首地址,申请失败,返回NULL;申请的内存空间需要手动初始化。

注意点:

1、可能会申请失败,所以需要判断返回是否是NULL。

2、申请的内存需要强制转换为指定的数据类型,例如:(int*)malloc(10*sizeof(int))

3、分配的内存是未初始化的,需要先清理后使用。

4、使用完毕需要手动释放,如果没有释放会导致内存泄漏。

5、什么时候用:>500字节(具体大小视公司情况而定),须要手动申请。

6、释放之后的内存不可以再使用,如要使用需要再次申请。

7、如果同时申请两块内存,第一次申请成功,第二次申请失败,一定要记得释放掉第一次成功申请的内存。

实例代码:

 #define LEN 10
int main(int argc, const char * argv[]) {
int *p = NULL;
//申请一段空间,放10个int
p = (int*)malloc(*sizeof(int));
if(p==NULL){
printf("malloc failed\n");
return ;//返回,不能进行下面的操作
}
printf("before clear:");
for(int i=;i<LEN;i++){
printf("%d, ",*(p+i));
}
printf("\n after clear:");
memset(p,0x0,*sizeof(int));//内存清0
for(int i=;i<LEN;i++){
printf("%d=0x%x, ",*(p+i),*(p+i));
}
/*数据处理*/
free(p);//手动释放
p = NULL;//增强了保险,使p不可以用
return ;
}

2)memset, 用于初始化内存空间, 结构 void *memset(void *, int, size_t);需要引用头文件<string.h>

参数1:表示内存的首地址

参数2:内存设置成多少[0,0xff]

参数3:设置多少字节

3)free 用于释放申请的内存,例如:free(p)。

4)calloc 用于申请内存; 不需要手动初始化,申请的内存空间可直接使用。

实例代码:

  int main()
{
int *p;
p = (int*)calloc(, sizeof(int));
if(p==NULL){
printf("calloc failed\n");
return ;
}
for(int i=;i<;i++){
printf("%d ",*(p+i));
}
free(p);
return ;
}

5)realloc ,  重新调整/申请内存;结构void* realloc(void* ptr, unsigned newsize);可以扩大或者缩小。可能执行失败扩大时,

可能分配不到,需要到新的地址申请,那么数据被拷贝到新的位置,原来的内存将被free掉,realloc返回新内存的地址

例如:realloc(NULL, 200) 等价于 malloc(200); 表示新申请一个大小为200的内存;

realloc(ptr,0)等价于 free(ptr);表示释放内存

实例代码:

 int main()
{
int *p;
p = (int*)malloc(*);
if(p == NULL)
return ;
printf("fisrt alloc p=%p\n",p);
*p = ;
//清零。。使用
//扩大的内存比较大的时候,p可能会变
p = (int*)realloc(p, );
if(p == NULL)
return ;
printf("second alloc p=%p\n",p);
printf("first int is %d\n",*p);
free(p);
return ;
}

6)memchr 用于在规定的内存范围中查找指定的字符,void *memchr(const void *src, int c, size_t size);

从s指针指向的内存中查找 c , 找到了返回c在s中的地址,否则返回NULL

实例代码:

 int main()
{
char str[] = "hello world";
char ch = 'r';
char *p;
p = (char*)memchr(str, ch, );//查找范围为前3个字节
if(p == NULL)
printf("can not find the char.\n");
else
printf("%s\n",p);
return ;
}

7)memcpy 用于内存拷贝;void *memcpy(void *dst, const void *src, size_t size);

1、需要保证dst指向的内存空间足够容纳size个字节

2、dst src指向的内存空间不能有重叠部分

实例代码:

 int main()
{
char str[] = "hello world";
char str2[] = "zhongguo";
memcpy(str+strlen(str), str2, strlen(str2)+);//+1 多拷贝一个结束符
printf("%s\n",str);
}

8)memmove 用于内存移动;void *memmove(void *dst, const void *src, size_t len);dst src指向的空间可以重叠

实例代码:

 int main()
{
char str[]="";
// char *p = "hello";//p指向字符串常量的首地址
// memmove(str, p, 5);//相当于memcpy
memmove(str, str+, );
printf("%s",str);//34567]67890
return ;
}

9)memcmp 用于比较字符串大小int memcmp(const void *s1, const void *s2, size_t n);s1==s2  返回0;s1< s2,返回<0 ;

s1>s2,返回>0;返回的值=第一个不相等的字符ascii码差值。

实例代码:

 int main()
{
char *p1 = "hello world";
char *p2 = "helLo";
int rst = memcmp(p1, p2, );
if(rst == )
printf("firt 6 chars equal\n");
else
printf("not equal,%d\n",rst);
return ;
}

iOS 阶段学习第九天笔记(内存管理)的更多相关文章

  1. iOS阶段学习第一天笔记(Mac终端的操作)

    前言部分 原本从事的是.NET开发,一直在要不要转iOS 中犹豫徘徊,经过复杂的内心挣扎终于鼓起勇气辞职脱产学习iOS;希望通过四个月的 学习后能够拿到理想的薪资.以下是学习过程中的学习笔记,为了方便 ...

  2. iOS 阶段学习第八天笔记(指针)

    iOS学习(C语言)知识点整理 一.指针 1)概念:存储变量的地址的一个变量. 2) 数据存储类型分析 1.text (代码段) :存储二进制的可执行代码 2.data(初始化的数据段) 存储初始化的 ...

  3. iOS阶段学习第二天笔记(数据类型与进制)

    iOS学习(C语言)知识点整理笔记 1.C语言32个关键字 一.存储相关 1)auto 声明自动变量 2)register 声明寄存器变量 3)volatile 声明的变量在程序执行过程中可能被隐含的 ...

  4. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  5. 【转】iOS夯实:ARC时代的内存管理

    iOS夯实:ARC时代的内存管理 什么是ARC Automatic Reference Counting (ARC) is a compiler feature that provides autom ...

  6. Objective-C 高级编程:iOS与OS X多线程和内存管理

    <Objective-C 高级编程:iOS与OS X多线程和内存管理> 基本信息 原书名: Pro Multithreading and Memory Management for iOS ...

  7. iOS夯实:ARC时代的内存管理

    iOS夯实:ARC时代的内存管理 文章转自 ARC时代的内存管理 什么是ARC Automatic Reference Counting (ARC) is a compiler feature tha ...

  8. 菜鸟学习Cocos2d-x 3.x——内存管理

    菜鸟学习Cocos2d-x 3.x——内存管理 2014-12-10 分类:Cocos2d-x / 游戏开发 阅读(394) 评论(6)    亘古不变的东西 到现在,内存已经非常便宜,但是也不是可以 ...

  9. Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation

    原文:Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...

随机推荐

  1. [安卓] 19、一个蓝牙4.0安卓DEMO

    一.工程结构&概述 整个应用包含两个按钮,一个是搜索所有蓝牙设备,另一个是连接所有蓝牙设备~ 下面是整个工程的文件结构: 二.代码业务流程跟踪 2.1.两个按钮 下面讲讲该工程里的主要跳转流程 ...

  2. 运用JS设置cookie、读取cookie、删除cookie

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一种 ...

  3. 我心中的核心组件(可插拔的AOP)~第十三回 实现AOP的拦截组件Unity.Interception

    回到目录 说在前 本节主要说一下Unity家族里的拦截组件,对于方法拦截有很多组件提供,基本上每个Ioc组件都有对它的实现,如autofac,它主要用在orchard项目里,而castle也有以拦截的 ...

  4. NodeJS系列~第四个小例子,NodeJs处理Get请求和Post请求

    返回目录 说在前 对于HTTP请求来说,我们通常使用的是Get和Post,除此之外还有put,delete等,而对于get来说,比较lightweight,只是对字符串的传输,它会被添加到URL地址里 ...

  5. mongodb数据类型

    随着web2.0的时代到来,关系型数据库在越来越多的场景下暴漏出许多问题,为了解决这类问题,NoSql数据库应用而生,今天就来说说当下比较主流的NoSql数据库mongodb.   1. 基本数据类型 ...

  6. 每天一个linux命令(8):cp 命令

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果是 ...

  7. C# yeild使用

    C# yeild的两种形式的yield语句: yield return <expression>; yield break; 使用 yield return 语句每一次返回每个元素. 将使 ...

  8. font-size:100%有什么作用

    h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal;} input,select,textarea,samp {font-size:100%;} ...

  9. hdu4751Divide Groups(dfs枚举完全图集合或者bfs染色)

    /************************************************************************* > File Name: j.cpp > ...

  10. poj 1386 Play on Words(有向图欧拉回路)

    /* 题意:单词拼接,前一个单词的末尾字母和后一个单词的开头字母相同 思路:将一个单词的开头和末尾单词分别做两个点并建一条有向边!然后判断是否存在欧拉回路或者欧拉路 再次强调有向图欧拉路或欧拉回路的判 ...