常见的面试题:
1、堆内存与栈内存的区别。
定义 大小 使用 安全 优缺点
2、堆内存越界的后果
超过33页产生段错误
破坏malloc的维护信息,再次使用malloc/free会出错
脏数据
3、什么是内存泄漏,如何定位内存泄漏
由于粗心大意、业务逻辑出错导致使用完毕的内存没有释放,当再次需要时只能重新申请,又没释放,长期日积月累能使用的内存就越来越少,系统越来越慢甚至崩溃,这种情况就要内存泄漏。
1、Windows查看任务管理器,Linux使用ps -aux,或者通过GDB查看内存使用情况
2、使用mtrace代码工具,分析代码
3、封装malloc、free,记录申请、释放内存的过程
4、什么是内存碎片,如果避免内存碎片
已经释放但是也无法再次使用的就叫内存碎片,它是由于申请、释放的时间、大小不协调导致的
1、尽量使用栈内存
2、不要频繁申请、释放内存
3、尽量申请大内存,自己管理
字符串:
由字符组成的串形结构,结束标志是’\0’
存在方式:
字符串字面值:
“由双引号包含的若干个字符”,储存在代码段,只读,修改会产生段错误,地址,末尾隐藏了一个’\0’
const char* strp = “hello”;
sizeof(“hello”) 6 字符个数+1
字符数组:char str[] = {‘a’,‘b’,‘c’};
储存在栈内存,可以修改,需要手动添加\0
注意:字符数组不要设置数组的长度
一般使用字符串字面值来初始化