C语言之动态内存分布
来源:互联网 发布:网络语打卡的意思 编辑:程序博客网 时间:2024/06/05 07:41
作用域 { 局部变量 }
不被计算机应用程序主动收回的存储空间
目的是为了提高计算机的运行效率
一、存储区划分
高(内存地址大) 栈区
堆区
� 静态区
常量区
低(内存地址小) 代码区
所有在栈区的内存都在计算机主动分配和主动收回
堆区的内存是由程序员主动分配和主动收回的,不会被计算机应用空间主动分配及收回
静态区和常量区不会受到应用程序和程序员的管辖
代码区是计算机在编译完后存储一条命令
单项值传递 只能往下传,传递的是值 和内存有关系 并不是传完就释放
常量区:
char *string =“iPhone ” string[0] = ‘a’ 运行崩溃
‘a‘字符常量 5整形常量 ’“iPhone”字符串常量
char s[ ] = “iphone”
s[ 0] = “a”
char *52 ={‘i’,’p’,’h’,}
s2[0] = ‘a’
char *s3 = “iphone”
s3[0] = ‘a’,不能修改,运行崩溃
常量占用内存,只读状态,不能修改!!!
字符数组如果最后一位是\0那吗他就是字符数字变量
静态存储区:
static int a = 5;
static char string[255];
1.只初始化一次
2.如果初始没给值,默认值为0
3.只有程序退出才释放(永远存在)
将变量定义的类型前加static则该变量存储在静态存储区
堆区:由计算机应用程序编写人员主动分配和主动收回
malloc等内存分配函数分配的内存
代码区:
所有的语句编译后会产生CPU指令存储在代码区
二、堆内存分配函数
void *malloc(unsigned int size);
返回分配完的内存的首地址 需要分配的字节数,因是参数,可以写表达式
可以根据需求运行期分配内存
void * 不确定数据类型的指针变量
??//str = “iphone”;(101,102,103) 错误的 不要写等于号
char *str = malloc(8);
strcpy (str,”iphone”);
int *arr = malloc(4)
short *str = malloc(4)
arr分配一块内存放一个int型元素,sarr可存放两个short元素
student *p = malloc(sizeof(student));
student *p = malloc(sizeof(student)*5);
分配一个结构体内存和分配一个结构体数组的内存
内存释放
void free(void *)
free函数的作用是释放内存,内存释放是标记删除
三、其他的内存分配函数
calloc:
void *calloc(unsigned n,unsigned size);
分配n个size大小的空间,并且把该内存上的所有字节清零。
realloc:
void *realloc(void *p,unsiguned newSize);
给定的地址以及给定的大小重新分配
四、内存操作函数
char *s =”1234“;
int value = atoi(s);结果能转化成整型
初始化内存
void *memset(void *s,int c,size_t n)
从s指向的内存开始初始化n个字节的内容为c
内存拷贝
void *memcpy(void *dest,const void * source,size_t n)
从source指向的内存开始拷贝到dest,拷贝n个字节
内存比较:
int memcmp(const void *buf1, const void *buf2, unsigned int count)
比较buf1和buf2指向的内存是否相同,比较count个字节
不被计算机应用程序主动收回的存储空间
目的是为了提高计算机的运行效率
一、存储区划分
高(内存地址大) 栈区
堆区
� 静态区
常量区
低(内存地址小) 代码区
所有在栈区的内存都在计算机主动分配和主动收回
堆区的内存是由程序员主动分配和主动收回的,不会被计算机应用空间主动分配及收回
静态区和常量区不会受到应用程序和程序员的管辖
代码区是计算机在编译完后存储一条命令
单项值传递 只能往下传,传递的是值 和内存有关系 并不是传完就释放
常量区:
char *string =“iPhone ” string[0] = ‘a’ 运行崩溃
‘a‘字符常量 5整形常量 ’“iPhone”字符串常量
char s[ ] = “iphone”
s[ 0] = “a”
char *52 ={‘i’,’p’,’h’,}
s2[0] = ‘a’
char *s3 = “iphone”
s3[0] = ‘a’,不能修改,运行崩溃
常量占用内存,只读状态,不能修改!!!
字符数组如果最后一位是\0那吗他就是字符数字变量
静态存储区:
static int a = 5;
static char string[255];
1.只初始化一次
2.如果初始没给值,默认值为0
3.只有程序退出才释放(永远存在)
将变量定义的类型前加static则该变量存储在静态存储区
堆区:由计算机应用程序编写人员主动分配和主动收回
malloc等内存分配函数分配的内存
代码区:
所有的语句编译后会产生CPU指令存储在代码区
二、堆内存分配函数
void *malloc(unsigned int size);
返回分配完的内存的首地址 需要分配的字节数,因是参数,可以写表达式
可以根据需求运行期分配内存
void * 不确定数据类型的指针变量
??//str = “iphone”;(101,102,103) 错误的 不要写等于号
char *str = malloc(8);
strcpy (str,”iphone”);
int *arr = malloc(4)
short *str = malloc(4)
arr分配一块内存放一个int型元素,sarr可存放两个short元素
student *p = malloc(sizeof(student));
student *p = malloc(sizeof(student)*5);
分配一个结构体内存和分配一个结构体数组的内存
内存释放
void free(void *)
free函数的作用是释放内存,内存释放是标记删除
三、其他的内存分配函数
calloc:
void *calloc(unsigned n,unsigned size);
分配n个size大小的空间,并且把该内存上的所有字节清零。
realloc:
void *realloc(void *p,unsiguned newSize);
给定的地址以及给定的大小重新分配
四、内存操作函数
char *s =”1234“;
int value = atoi(s);结果能转化成整型
初始化内存
void *memset(void *s,int c,size_t n)
从s指向的内存开始初始化n个字节的内容为c
内存拷贝
void *memcpy(void *dest,const void * source,size_t n)
从source指向的内存开始拷贝到dest,拷贝n个字节
内存比较:
int memcmp(const void *buf1, const void *buf2, unsigned int count)
比较buf1和buf2指向的内存是否相同,比较count个字节
0 0
- C语言之动态内存分布
- C语言中动态内存分布
- c语言之变量内存分布
- C语言内存分布之数据段
- C语言内存分布
- C语言内存分布
- C语言内存分布
- C语言变量内存分布
- C语言内存分布详解
- C语言程序内存分布
- C语言中内存分布
- C语言中的内存分布
- C语言变量内存分布
- c语言程序内存分布
- 10.C语言之动态内存分配
- c语言基础之动态内存分配
- C语言之动态内存分配
- C语言之动态内存分配
- Linux驱动学习——中断、定时器
- jz2440 的中断中的底半部机制
- hdu hdu-2111-Saving HDU
- 【BFS】uva11624Fire!
- 重构获取异常栈信息--printStackTrace
- C语言之动态内存分布
- UVA1508-Equipment(状态压缩+暴力枚举)
- UVa11478 - Halum(差分约束)
- contos安装lnmp
- Qt Quick 中QMessageBox Class的使用学习笔记
- Java命名和目录接口——JNDI
- C语言之函数
- Leetcode--Recover Binary Search Tree
- C++ 纯socket 模拟登录37.com【过验证码】