
c++深层搜索学习笔记
文章平均质量分 72
工作需要学习此书,谨以此专栏记录
“JB...One”
这个作者很懒,什么都没留下…
展开
-
C++中const关键字的多方面应用
const有且只有一种作用,那就是限定被修饰的对象无法被修改,在c++中,被const修饰的对象被看作常量,存储在只读存储区(.rodata)。在c++中由const修饰的变量默认是内部链接的,即只在本.c文件中可以被看到。如果想要使被修饰的变量具有外部链接性,就需要在外用extern修饰。关于const与指针,我在指针一节中涉及到了,可以跳转下面的链接。既然只是做比较,那就不涉及修改参数的问题,但是为了避免,目标。而在c中,const修饰的变量默认是外部链接。可以看到用c编译的a是globl修饰的。原创 2024-07-23 08:00:00 · 344 阅读 · 0 评论 -
2-26 -- Void表示什么
而在void* 取代char* 为通用指针之后,mencmp函数的参数也变成的void*void* 表示一个可以指向任何类型的指针,也意味着void*指针的指向是不确定的。void* 指针可以和任何其它指针类型(函数指针除外),相互转换而不需强制转换。由于void*指针的指向是不确定的,所以也就无法取值和操作下标了。在函数声明或定义中,void 可以表示函数不接受任何参数。这就使得我们可以随意的传入任意类型的指针(函数指针除外)在k&RC时代,通用指针是char*,这就会带来不方便。这种转换是没有问题的。原创 2024-07-16 08:00:00 · 313 阅读 · 0 评论 -
20 --词法分析(lexical analysis)
编译器从i开始分析到+,由于标识符中不允许出现‘+’,所以在识别到’+‘时,就会提取出icount这个标识符,然后继续识别,识别到下一个‘+’就将两个‘+’提取成操作符’++',最后识别到分隔符。编译器在遇到空白()之前,以能够取得的,有意义的,最长的字符为记号。但是编译器却会将/*解释成注释符,将c注释掉。最后编译器会将icount++;但是由于最大匹配原则,编译器会这样解释。可能编写者想表达的意思是。写代码的人可能想的是。原创 2024-07-14 17:27:38 · 363 阅读 · 0 评论 -
2-17,18,19 -- 关于指针
int a = 4;//指针p是指向变量a的地址的指针。原创 2024-07-15 18:00:00 · 459 阅读 · 0 评论 -
复合类型的字节对齐
原因就是要想提高cpu在读取内存的速度,就需要有规律的存储数据,确保数据结构在内存中的存储地址是某个数(4,8的倍数),因为cpu读取是按块进行的,例如四字节一读,八字节一读。明明sVar这个结构体就两个元素,5和’A’,一个是int型占4个字节,一个是字符型占1个字节,那为什么这里却输出8,说这个sVar结构体占了8个字节呢?即便一个int加上一个char本应只占5字节的数据,也会通过字节补齐占8个字节。这个例子也告诉我们在定义数据的时候,应该有顺寻,使得内存得到最大化的利用。占用size 16字节。原创 2024-07-15 08:00:00 · 386 阅读 · 0 评论 -
2.2动态库
前面提到的动态库特性,现在通过这个制作库的实例就可以很清楚的看到,当可执行文件只有在加载到内存中运行的那一刻,才回去找到需要的库函数,而不是提前就将库函数加载到可执行文件中,这降低了可执行文件所占用的磁盘空间。原创 2024-07-14 16:23:35 · 571 阅读 · 0 评论 -
2-1静态库
执行test.c文件,链接文件去链接需要的变量和函数,当链接到add()和sub()时就去libtest.a静态库中寻找对应的符号(包含变量和函数)),通过这个符号便可以确定代码段的地址,再将地址填入调入指令。原创 2024-07-10 08:00:00 · 307 阅读 · 0 评论 -
汇编基础知识
这是1.4中探讨variable的scope和lifetime的代码,这里我将用它来做基础的汇编知识学习global fun声明fun函数为全局符号,意味着它在其他文件中也可以被引用。type fun, @function: 指定fun的类型为函数。fun:: 函数fun的开始。LFBO:: 标签,通常用于调试信息。cfi_startproc: 调用帧信息的开始。pushq %rbp: 将基指针rbp压入栈。原创 2024-07-07 14:14:32 · 1044 阅读 · 0 评论 -
static的作用域和链接性
在说到static之前,需要先明确变量类型:而在聊到变量类型之前我们可以将变量的两个属性好好学一学。原创 2024-07-07 14:13:13 · 1078 阅读 · 0 评论 -
1-2字节顺序
大端存储和小端存储指的是数据字节的高位和低位。如果计算机采用大端存储,则高位字节数据存储在低地址。如果计算机采用小端存储,则低位字节数据存储在低地址。原创 2024-07-07 14:04:05 · 917 阅读 · 0 评论 -
c程序编译链接的过程解析
c程序编译过程有的人会直接简述成四个字:编译链接但我们知道对于任何一个c程序而言从.c/.cpp文件到最后的.exe/a.out可执行文件,期间都经历了四个步骤而头文件里的存放什么呢?有这么三样1.函数原型声明2.全局变量的声明3.定义的宏和类型4.全局常量5.库函数就是定义了一个常量的宏PI,而在预处理过程中就是要将程序中的PI替换成3.14159。原创 2024-07-07 13:42:20 · 512 阅读 · 0 评论