C语言
yofer张耀琦
我喜欢自己开朗的性格
展开
-
C语言内存四区
1、代码区 代码区code,程序被操作系统加载到内存的时候,所有的可执行代码都加载到代码区,也叫代码段,这块内存是不可以在运行期间修改的。 2、静态区 所有的全局变量以及程序中的静态变量都存储到静态区。 3、栈区 栈stack是一种先进后出的内存结构,所有的自动变量,函数的形参都是由编译器自动放出栈中,当一个自动变量超出其作用域时,自动从栈中弹出。对于自动变量,什么时候入栈,什么时候原创 2015-06-03 17:42:27 · 1188 阅读 · 0 评论 -
操作系统处理内存时内存页为4k
windows和unix处理内存时,一个内存页的大小都为4k。 测试代码 int main() { while (1) { int *p = (int *)malloc(1024); getchar(); } return 0; } 回车四次,程序内存增加一次,每次增加4k。原创 2015-06-04 11:01:55 · 1838 阅读 · 0 评论 -
C语言省略extern的缺陷
在一个文件中(比如a.c)定义一个全局变量int a = 10; 然后在另一个代码文件(比如main.c)中需要使用变量a,可以写 int a; 单独看main.c文件时就会出现二义性,一个含义是当其他文件中没有定义过全局变量a,则这里定义一个变量a。另一个含义是当其他文件中包含声明全局变量a,则这里声明一个变量a。 所以当a.c中定义了全局变量a时,在main.c中最好使用: exter原创 2015-06-03 16:58:20 · 889 阅读 · 0 评论 -
malloc、calloc、relloc
1、malloc void * malloc(size_t _Size); malloc函数在堆中分配参数_Size指定大小的内存,单位:字节,函数返回void *指针。 2、calloc void * calloc(size_t _Count, size_t _Size); calloc与malloc类似,负责在堆中分配内存。 第一个参数是所需内存单元数量,第二个参数是每个内存单元的原创 2015-06-04 11:10:51 · 640 阅读 · 0 评论 -
结构体内存对齐模式
结构体内存对齐模式各种情况详解 #include struct A { int a; // 此时结构体占用4个字节 char b; // 此时结构体占用8个字节 char c; // 还是8个字节 char d; // 还是8个字节 char e; // 还是8个字节 char f; // 现在是12个字节 }; struct B { char a; // 1个字节 c原创 2015-06-05 23:21:04 · 586 阅读 · 0 评论 -
结构体变相实现数组赋值
struct name { char array[10]; }; int main() { char name1[10] = "name1"; char name2[20] = "name2"; name1 = name2; // 这里是出错的,不能在数组之间进行赋值 struct name a1 = { "hello" }; struct name a2 = { 0 }; a2原创 2015-06-05 23:49:29 · 544 阅读 · 0 评论 -
结构体内存泄漏
#include #include union A { char a; char *b; // 联合体的指针成员要特别注意 }; int main() { A a; a.b = (char *)malloc(10); // b指向了一个堆的地址 // 如果联合体中有指针成员,那么一定要使用完这个指针,并且free指针之后才能使用其他成员 a.a = 10; // b的值也成了1原创 2015-06-06 09:12:18 · 1426 阅读 · 0 评论 -
文件操作:fseek函数和ftell函数
1、fseek函数: int fseek(FILE * _File, long _Offset, int _Origin); 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败则不改变stream指向的位置,函数返回一个非0值。 超出文件末尾位置,还是返回0。往回偏移超出首位置,原创 2015-06-06 16:05:00 · 4066 阅读 · 0 评论