c语言学习笔记:内存管理与位运算

发布时间:2026/8/11 3:30:04
c语言学习笔记:内存管理与位运算 最近学到了内存管理和位运算这一块内容不算多但挺重要的整理一下重点。一、内存管理内存分布程序运行时的内存大概分这么几块- 栈区局部变量、函数形参、返回值、函数调用保护现场。系统自动管理默认8M访问效率高但空间小。- 堆区手动申请和释放空间大但效率相对低。用malloc申请free释放忘了释放就内存泄漏了。- 数据区.data段放已初始化的全局变量和静态变量.bss段放未初始化的默认清0。- 字符串常量区hello world这种就存在这里。- 文本区放代码指令。堆区操作主要用这几个函数- malloc(size) 申请size字节的堆空间成功返回首地址失败返回NULL。- free(ptr) 释放申请的堆空间。- calloc(nmemb, size) 申请数组空间并清0。基本套路就是申请完先判断是不是NULL用完及时free。int *p malloc(4);if (NULL p) {printf(malloc error\n);return 0;}*p 10;free(p);二、位运算位运算直接操作二进制位效率很高。六种位运算符运算符 含义 规则 按位与 全1为1有0则0| 按位或 有1则1全0为0^ 按位异或 相同为0相异为1~ 按位取反 1变00变1 左移 低位补0相当于乘2^n 右移 有符号数补符号位无符号补0相当于除2^n常用技巧1. 指定位置1num num | 1 n;2. 指定位清0num num ~(1 n);3. 两数交换不用中间变量a a ^ b;b a ^ b;a a ^ b;原理就是 a ^ a 0 a ^ 0 a 。优先级记住单目 移位 ^ |三、程序调试方法打印调试最直接的printf输出变量值看对不对。gdb调试Linux下用的调试工具能打断点、单步执行、查看变量。常用指令- b 行号 打断点- r 运行程序- n 执行下一行- p 变量名 查看变量值- s 跟进函数- q 退出编译的时候要加 -g 选项才能用gdb调试。段错误用 r where 能定位位置。这部分核心就是理解内存分布、会用malloc/free以及位运算的几个常用操作。gdb调试用熟了找bug效率高很多。