黑马程序员--c语言动态内存分配
2015-06-27 13:05
393 查看
动态内存分配 (malloc)
函数原型:
void *malloc (size_t size)
size_t是无符号的长整形
动态内存在堆段
返回值void*表示泛型指针,可以赋给任意一个类型的指针变量
函数类型存储在栈段
eg:
char *p = malloc(1000);
p 是这一千个字节的首地址
p+1是第2个字节的地址
定义后可以使用他的每一个空间
int *q = malloc(1000);
q[0]是前4个字节,使用q可以4字节4字节的访问空间
堆空间的分配有可能失败
char *p = malloc(1000);
if (!p)
{
perror("malloc");
exit(-1);
}//exit 表示将当前进程终止 return表示将当前函数终止 不管在main函数还是其他函数,用到exit程序会终止
使用完毕,要释放
free(p);
内容并没有改变,只是权限释放掉
开辟堆空间,告诉系统这块空间已被占用
栈空间是静态内存分配,编译时就已经决定了,main开辟空间根据声明的变量决定,不会在改变
堆空间是动态内存分配,是在运行的时候决定的
数组的大小占用的空间在编译代码的时候就已经决定了,属于静态内存分配
动态内存分配
大小运行时决定
程序员分配
堆段
手动释放
静态
大小编译时决定
编译器分配
栈段 数据段 只读数据段
自动释放
函数原型:
void *malloc (size_t size)
size_t是无符号的长整形
动态内存在堆段
返回值void*表示泛型指针,可以赋给任意一个类型的指针变量
函数类型存储在栈段
eg:
char *p = malloc(1000);
p 是这一千个字节的首地址
p+1是第2个字节的地址
定义后可以使用他的每一个空间
int *q = malloc(1000);
q[0]是前4个字节,使用q可以4字节4字节的访问空间
堆空间的分配有可能失败
char *p = malloc(1000);
if (!p)
{
perror("malloc");
exit(-1);
}//exit 表示将当前进程终止 return表示将当前函数终止 不管在main函数还是其他函数,用到exit程序会终止
使用完毕,要释放
free(p);
内容并没有改变,只是权限释放掉
开辟堆空间,告诉系统这块空间已被占用
栈空间是静态内存分配,编译时就已经决定了,main开辟空间根据声明的变量决定,不会在改变
堆空间是动态内存分配,是在运行的时候决定的
数组的大小占用的空间在编译代码的时候就已经决定了,属于静态内存分配
动态内存分配
大小运行时决定
程序员分配
堆段
手动释放
静态
大小编译时决定
编译器分配
栈段 数据段 只读数据段
自动释放
相关文章推荐
- C++IO对象不可复制或赋值
- 它们,不能是虚函数!!!
- C语言scanf()函数详解
- C语言 关于用户名与密码的存放(文件)
- STL学习笔记-- multiset
- c++字符串与字符等类型互相转换
- C++POST提交数据
- 线性表链式存储-使用c语言实现
- C++实现MD5加密
- 《C/C++专项练习》 — (3)
- 《C/C++专项练习》 — (3)
- Ubuntu下面安装eclipse for c++
- 计数排序(C语言版本)
- 线性表顺序存储-使用c语言实现
- eclipse中添加c++11支持
- C++经典面试题(五)
- C语言指针用法笔记
- C++经典面试题(四)
- c语言 单词计数
- C++ 实现MST kruskal's algorithm