C语言 - 初级内存
2015-08-21 19:45
337 查看
代码区:存放的都是编译后形成的二进制文件.
常量区:关键词const.放在常量区的常量是只读不可写的.
静态区:关键词static.只被初始化一次,默认值为0,程序运行完就会被释放.
堆区:关键词malloc.是由程序员手动分配和释放的,它的空间比较大.
(内存释放:关键词free,内存都是标记释放的,只是指针不指向这里了,但是内容还在.)
栈区:存储的是局部变量和函数参数.(即卸载花括号里的变量)
栈区的特点:先进后出,即从高到低分配,从低到高使用.
注意!!!!!!!!!通过指针操作,返回栈内存是不安全的.栈区的内存是系统自动分配和释放的,栈区的空间容量是很小的.
内存分配函数:
void *calloc(n,size);
例如:
int *p = calloc(10, 2);
for (int i=0; i<20; i++) {
*(p+i) = 2;
printf("%d ",*(p+i));
}
void *realloc(*p,new size);
例如:
int *p = calloc(10, 2);
for (int i=0; i<20; i++) {
*(p+i) = 2;
printf("%d ",*(p+i));
}
printf("\n");
int *p2 = realloc(p, 5);
for (int i=0; i<5; i++) {
*(p+i) = 2;
printf("%d ",*(p2+i));
}
内存操作函数:
内存赋值:void *memset(void *s , int c , size_t n);
例如:
char *p1 = malloc(8);
char *p2 = memset(p1, 97, 8);
for (int i=0; i<8; i++) {
printf("%c ",*(p2+i));
}
内存拷贝:void *memcpy(void *dest,const void*source,size_t n);
例如:
char *p1 = malloc(8);
char *p2 = memset(p1, 97, 8);
for (int i=0; i<8; i++) {
printf("%c ",*(p2+i));
}
char *p3 = malloc(5);
p3 = memcpy(p3, p2, 5);
for (int i=0; i<5; i++) {
printf("%c ",*(p3+i));
}
内存比较:int memcmp(const void *buf1, const void *buf2, unsigned int count)
例如:
char *p4 = malloc(8);
char *p5 = malloc(8);
memset(p4, 65, 8 );
memset(p5, 97, 8 );
int count = memcmp(p4, p5, 8);
printf("%d",count);
第一个参数是被减指针,第二个参数是减数指针,第三个参数是比较几个字节.跟strcmp类似,也是比较的ASCLL码表的值.
常量区:关键词const.放在常量区的常量是只读不可写的.
静态区:关键词static.只被初始化一次,默认值为0,程序运行完就会被释放.
堆区:关键词malloc.是由程序员手动分配和释放的,它的空间比较大.
(内存释放:关键词free,内存都是标记释放的,只是指针不指向这里了,但是内容还在.)
栈区:存储的是局部变量和函数参数.(即卸载花括号里的变量)
栈区的特点:先进后出,即从高到低分配,从低到高使用.
注意!!!!!!!!!通过指针操作,返回栈内存是不安全的.栈区的内存是系统自动分配和释放的,栈区的空间容量是很小的.
内存分配函数:
void *calloc(n,size);
例如:
int *p = calloc(10, 2);
for (int i=0; i<20; i++) {
*(p+i) = 2;
printf("%d ",*(p+i));
}
void *realloc(*p,new size);
例如:
int *p = calloc(10, 2);
for (int i=0; i<20; i++) {
*(p+i) = 2;
printf("%d ",*(p+i));
}
printf("\n");
int *p2 = realloc(p, 5);
for (int i=0; i<5; i++) {
*(p+i) = 2;
printf("%d ",*(p2+i));
}
内存操作函数:
内存赋值:void *memset(void *s , int c , size_t n);
例如:
char *p1 = malloc(8);
char *p2 = memset(p1, 97, 8);
for (int i=0; i<8; i++) {
printf("%c ",*(p2+i));
}
内存拷贝:void *memcpy(void *dest,const void*source,size_t n);
例如:
char *p1 = malloc(8);
char *p2 = memset(p1, 97, 8);
for (int i=0; i<8; i++) {
printf("%c ",*(p2+i));
}
char *p3 = malloc(5);
p3 = memcpy(p3, p2, 5);
for (int i=0; i<5; i++) {
printf("%c ",*(p3+i));
}
内存比较:int memcmp(const void *buf1, const void *buf2, unsigned int count)
例如:
char *p4 = malloc(8);
char *p5 = malloc(8);
memset(p4, 65, 8 );
memset(p5, 97, 8 );
int count = memcmp(p4, p5, 8);
printf("%d",count);
第一个参数是被减指针,第二个参数是减数指针,第三个参数是比较几个字节.跟strcmp类似,也是比较的ASCLL码表的值.
相关文章推荐
- HDU 3746 Cyclic Nacklace (kmp求循环节)
- HDU 1358 Period (kmp求循环节)
- 学会使用QT的帮助文档
- struct和typedef struct
- 实现单例模式C++版本
- C语言 - 结构体
- Java和C++的区别
- 国外程序员整理的 C++ 资源大全
- C++类所占空间总结
- C++: std::string 与 Unicode 如何结合?
- C++——string类和标准模板库
- 深入分析C++中deque的使用
- 用c语言怎样得到一个汉字的GB2312编码
- C++多线程编程入门3
- C++继承
- 关于C/C++生成特定大小文本文件的初探
- C++实参形参
- C++ Primer 5e chapter 10.1
- C/C++学习笔记--指针(Pointer)
- c++学习笔记(三)多态性