黑马程序员---C语言 内存分区
来源:互联网 发布:2016网络最新最火的词 编辑:程序博客网 时间:2024/05/27 19:27
-----------培训学习型博客-------
1、//内存区域的划分(从低到高)
2、static int number = 10;//被static 修饰的全局变量生命周期随着程序的创建而创建,随着程序的消失而消失;
3、//局部变量:定义在函数内部的变量就叫做局部变量,局部变量都是存储在栈区
3、//内存管理的时候系统也是遵循内存对齐原则,因为这样可以提高内存的分配效率
4、//静态区(全局区)
//有static 修饰的变量存放在静态区,静态区的变量有一个特点,整个程序运行中,只被初始化一次;如果人为未初始化,系统默认初始化为0
5、//系统提供的函数由于使用比较频繁,我们把它存放在栈区,原因是栈区的内容会被反复的创建销毁,不需要我们去管理内存还是因为栈区的内存开辟和释放的内存
6、//代码区:程序中运行的函数或者变量等等语句都会编译成CPU指令,存放在代码区;
7、 malloc calloc realloc memset (要做释放free(p);操作并赋值p =Null)
memcpy memcmp (不用做释放操作)
// free(p); 过度释放,释放多次,过度释放会造成crash 崩溃
p = NULL; //指向的是无效的空间,防止野指针错误
(1)malloc:申请内存的函数
// void *malloc( size_t)
// void * ,泛类型,void * 返回的指针可以赋值给任何类型的指针,int * ,float* ,char *,short*
// size_t 代表申请多少个字节的大小的内存空间
// malloc 的作用,申请的 size 个字节大小的空间,并把申请的空间首地址返回
(2) //calloc(size_t, size_t)
//realloc(p, n) //内存的重新分配,第一个参数是地址,第二个参数是重新分配的内存大小
(4)//使用relloc 重新分配空间的时候,若再原有分配空间的基础上可以连续载增加 n (原有空间大小 )个空间大小,指针指向不会改变;若这时不可以连续增加(n - 原有空间大小),会将之前的空间给释放掉,然后再去堆区的其他位置开辟连续的n个空间大小的内存,指针的指向发生改变了;
注意:重新分配的空间需要接收
// int *p6 = malloc(12);
// *p6 = 10;
// *(p6 + 1) = 20;
// *(p6 + 2) = 30;
// printf("之前的地址:%p\n",p6);
// p6 = realloc(p6, 20);//重新分配空间的大小
// printf("之前的地址:%p\n",p6);
// *(p6 + 3) = 40;
//
//
//
//
//
//
//
// *( p6 + 4) = 50;
// //重新分配的空间会把之前空间的内容给拷贝过来,放到相对的位置,所以需要遍历
// for (int i = 0; i < 5; i ++) {
// printf("%d ",*(p6 + i));
// }
// free(p6);
//
//
//
// p6 = NULL;
(3)memset(开始地址, n, size); 给定一个开始地址,将size字节的空间大小内的数据置为n,若n为0,size为10,就是把10个字节中的数据置为0;
(4) memcpy(dest, source, n); //从源source指针开始的位置,向目的指针拷贝n个字节的数据;注意:前面的空间要足够大;
(5)memcmp(p1, p2, n); 比较p1 和 p2 指向的内存里的内容是否相同,比较n 个字节,返回值是0,相等;不同的时候返回差值;比较过程是逐个字节比较,返回第一对对应字节位置不同数据的差值
0 0
- 黑马程序员---C语言 内存分区
- 黑马程序员-C语言-内存管理概念、内存分区以及内存函数
- 黑马程序员——C语言---内存管理的概念和内存分区
- 黑马程序员-C语言常量、变量
- 黑马程序员-C语言数组
- 黑马程序员-C语言基本运算
- 黑马程序员-C语言函数
- 黑马程序员-c语言数据
- 黑马程序员-c语言字符串
- 黑马程序员-c语言数组
- 黑马程序员-c语言指针
- 黑马程序员-C语言指针
- 黑马程序员-C语言总结
- 黑马程序员——C语言--常见的内存分配函数
- 4、黑马程序员-C语言内存分析
- 黑马程序员--c语言动态内存分配
- [黑马程序员]C语言内存管理
- C语言内存分区
- 【编程题】-C++实现:判断字符串在末尾加一个字符,能否构成回文串
- 一个小公司老板的日常管理,希望能让创业的朋友学到东西
- 网络编程入门(1
- lintcode-旋转图像-161
- Java命令行执行那些事
- 黑马程序员---C语言 内存分区
- 详解Objective-C的meta-class ,runtime创建类,添加实例变量
- Fiddler手机抓包
- lintcode-跳跃游戏-116
- 无锁编程(一) - Double-checked Locking
- git的学习--绪论
- 由jQuery到AngularJS的思维转变
- 使用Lift+Maven+Idea搭建web应用
- Hello blog!