摘要:
好文, 与当年我看《深度探索c++对象模型》时的困惑一样,当时看的也是云里雾里。 https://blog.csdn.net/shichao1470/article/details/91563282 有一点要说明一下, 现在最新的g编译器,dump出c类对象内存布局的编译选项,应该变为: -fdum 阅读全文
摘要:
让自己习惯c++ 尽可能的使用const 当const修饰类成员函数时,如果两个函数只有常量性不同, 可以被重载。(本质上,const其实修饰的是this指针, 所以呢, 本质上还是参数的类型不同导致的重载) 如果要修改一个const的类对象内的成员变量, 需要把变量使用mutable修饰成员变量。 阅读全文
摘要:
const变量的文件作用域 以前从来没有注意到的一个知识点: const 修饰的对象默认只有当前文件中有效。这就表明了: 在不同的.cpp文件内可以定义相同名称的const 对象。 如果要使const 我修饰的变量具有全局使用域,在定义该变量时,需要加上extern 关键字。 原因: 在未声明为 e 阅读全文
摘要:
gdb内存监控 gdb watch 内存监控 gdb的watch的内存功能,使用场景一般是发现的情况,要查清楚一块内存被谁给踩了,我们直接使用watch 监控它就可以了。 watch *(int*)内存地址: 当监控的内存的内容发生变化(即写操作)时,程序停止运行。 rwatch *(int*)内存 阅读全文
摘要:
基本的命令 把一个源文件,编译成可执行文件,经过了预处理、汇编、编译与链接。 -E: 对目标文件只进行预处理,生成的还是源码。 例如:g++ -E 1.cpp -o 1.i -S: 对目标文件进行预处理、编译操作,生成汇编代码。 例如:g++ -S 1.cpp -o 1.s -o: 对目标文件进行预 阅读全文
摘要:
函数模板 定义 例子一 template<typename T> void Func() { cout << "hello, world" << endl; } 例子二 template <typename T, template<typename,typename> class A, size_t 阅读全文
摘要:
在调试过程中, 如果要看寄存器的内容的话, 需要使用到的寄存器还是需要熟悉一下的。 32位下的x86_32 2个变址寄存器:ESI、EDI 6个段寄存器:ES、CS、SS、DS、FS、GS 4个数据寄存器:EAX、EBX、ECX、EDX esp:寄存器存放当前线程的栈顶指针 ebp:寄存器存放当前线 阅读全文
摘要:
KMP算法 一. 应用场景 给定原字符串A, 查找字符串A中是否包含字符串B. 例如: 在字符串A"aassddaassffaa"中查找是否包含字符串B"aassf" ? 二. KMP算法 核心思想: 略 (去百度,不会写),不过该算法很牛啊, 佩服佩服!. 三. 代码实现 // 第一步:求模式字符 阅读全文
摘要:
ELF文件与链接过程 一. ELF文件 1. ELF文件种类 ELF文件标准里面把系统中采用ELF格式的文件分为4类,如下所示. 使用linux下的file命令可以查看一个文件的类型. 可执行文件 可重定位文件: 包含了代码和数据的 .o文件, 静态链接库也归为它. 共享目标文件: 包含了代码和数据 阅读全文
摘要:
c++11 标准的特性总结 c++引入了很多新特性,我这里列举了一些我觉得很好的特性. 后续可能再补充其它. default 与 delete关键字 当我们想让编译器生成默认的构造函数或赋值运算符时,我们可以使用default关键字指示编译器生成. 要注意几点: defalut关键字只能指示编译器可 阅读全文