- 博客(36)
- 收藏
- 关注
原创 安装Cmake
然后发现里面有一些有关openssl的库 not found。就在顶层CMakeLists.txt文件的开头加入。嘿,还真好使,不提示错误了,最后提示执行。这个就是设置变量的语法,然后再尝试执行。出来版本了,说明cmake安装成功了。好吧照他说的做,执行完后执行。被这玩意折磨了好一会。那你就可以尝试这个了。
2024-01-04 16:57:59 350
原创 深入浅出寄存器
32位Intel CPU所含有的寄存器1.4个数据寄存器(EAX、EBX、ECX和EDX),也叫通用寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。寄存器AX和AL通常称为累加器,用累加器进行的操作可能需要更少时间。累加器可用于乘,除,输入/输出等操作,它们的使用频率很高;寄存器BX称为基地址寄存器。它可作为存储器指针来使用;寄存器CX称为计数寄存器。在循环和字符串操作时,要用它来控制循环次数;在位操作。
2023-10-26 21:34:03 48
原创 设计模式-工厂模式
知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达。
2023-10-16 16:33:37 45
原创 设计模式-单例模式
知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达!
2023-10-15 15:58:33 58
原创 Nginx源码剖析之内存池
通过使用内存池,NGINX有效地降低了内存分片,减少了内存泄露的可能。在使用小内存时只是进行了简单粗暴地分割来分配内存。这一方面简化了操作提高了效率。但是,另一方面这些大小不一小块内存因为没有管理信息的维护而不能及时释放和重用。它们只能在整个内存池释放时才能作为一个整体能得以释放。不过因为NGINX本身运行具有的阶段化的特征,特定内存池都只在特定阶段存在,使得内存不能及时释放的影响不是很大。或许NGINX的内存池也能结合kernel的slab内存池的某些特性。
2023-10-04 15:45:54 50
原创 Linux-简单的gdb调试和Makefile搭建
废话文学程序的发布方式有两种,debug模式和release模式Linux gcc/g++出来的二进制程序,默认是release模式要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项正文来了首先在编译时,必须要把符号表信息加到可执行文件中。使用编译器的-g参数gdb 常用参数。
2023-09-21 15:18:35 42
原创 Linux文件
即称为为目录设置粘滞位。粘滞位是针对目录而言的概念,通常需要为共享目录设置粘滞位。通过为目录设置粘滞位,可以在保证目录共享的同时防止其他用户删除共享目录中非所有者的文件。如果想多个账号相互协同,可以使用粘滞为给目录设置。最终权限 = 起始权限 & (~umask)在目录下新建删除文件需要w。进入一个目录仅需x权限,查看目录的文件内容需要r。目录的起始权限:777。文件的起始权限:666。umask为权限掩码,
2023-09-21 09:32:03 54
原创 c++-list
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。
2023-09-21 09:00:32 24
原创 数据机构-常见排序
1. 元素集合越接近有序,直接插入排序算法的时间效率越高2. 时间复杂度:O(N^2)3. 空间复杂度:O(1),它是一种稳定的排序算法4. 稳定性:稳定1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:不稳定1. 冒泡排序是一种非常容易理解的排序2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:稳定。
2023-09-18 17:48:17 30
原创 数据结构-栈和队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。
2023-09-15 17:00:49 22
原创 简单模拟string
1. string是表示字符串的字符串类2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。比特就业课3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>string;4. 不能操作多字节或者变长字符的序列。等会写一下这些。
2023-09-14 16:11:28 24
原创 STL的故事
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL的优点包括高效性、可复用性和标准化。它提供了经过优化的数据结构和算法实现,能够提高程序的执行效率。同时,STL的模板类和函数具有通用性,可以适用于不同类型的数据,提高了代码的可复用性。另外,STL是C++标准库的一部分,得到了广泛的应用和标准化,使得开发者能够更加方便地使用和学习。原始版本。
2023-09-14 15:22:03 20
原创 实现一个类似于cp的命令程序,该程序复制一个包含空洞的普通文件
这个程序通过pread()函数从源文件中读取数据,并使用pwrite()函数将数据写入目标文件。pread()和pwrite()函数可以指定文件偏移量,这样可以确保目标文件的空洞与源文件保持一致。pread()函数和pwrite()函数是Linux系统提供的文件I/O函数,用于读取和写入文件中的数据。它们与read()和write()函数类似,但具有额外的参数,可以指定文件偏移量。下面分别详细介绍pread()函数和pwrite()pread()
2023-08-08 14:33:39 51
原创 C++中的静态全局变量只能是基本类型,不能是自定义的C++类型。
如果需要在全局范围内定义一个静态变量,且它是自定义的C++类型,可以考虑使用类的静态成员变量或者单例模式来实现。通过类内定义静态成员变量可以在其中使用自定义类型,并且在需要的地方进行访问。但是,如果尝试在静态全局变量中使用自定义的C++类型,会导致编译错误。如果想要在其他文件中访问该变量,可以使用extern关键字来声明该变量。静态全局变量只在当前.cpp文件范围内可见,其他.cpp文件无法访问。静态全局变量是在程序运行期间一直存在的变量,
2023-07-30 17:00:12 47 1
原创 c++入门(三)认识类
class为定义类的关键字,TypeName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。
2023-07-22 20:51:30 20
原创 c++入门(二)
1.定义以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。在函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。2.特性inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。内联说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求。
2023-07-22 20:11:24 21
转载 free释放是不是直接还给系统
用户 free 掉的内存并不是都会马上归还给系统,ptmalloc 会统一管理 heap 和 mmap 映射区域中的空闲的 chunk,当用户进行下一次分配请求时,ptmalloc 会首先试图在空闲的chunk 中挑选一块给用户,这样就避免了频繁的系统调用,降低了内存分配的开销。如果每次free掉的内存都还给OS的话,尤其是在小字节的情况下,那么造成的情况,就是一大块的内存被你弄的千疮百孔,也就是说一块内存,里面有很多gap。在操作系统的虚拟内存管理中,管理着的都是固定大小的内存,如4K,那。
2023-07-12 17:20:22 179 1
原创 Get到栈的一个小知识
栈是向下增长,这样一来,栈顶元素的地址是所有栈中元素地址中最低的。栈指针%rsp保存着栈顶元素的地址。他们之间的区别是在机器代码中,pushq指令为1个字节,而上面两天指令一共需要8个字节。其实我想说的是,将一个四字值压入栈中,首要要将栈指针减8,然后将值写到新的栈顶地址。因此,指令pushq %rbp的行为等价于下面两条指令。
2023-07-11 15:06:07 40 1
原创 cpp命名空间
中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存。在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是。同一个工程中允许存在多个相同名称的命名空间。编译器最后会合成同一个命名空间中。关键字的出现就是针对这种问题的。{} 中即为命名空间的成员。定义命名空间,需要使用到。命名空间中可以定义变量。
2023-06-07 22:58:31 39 1
原创 Linux day1
chmod 命令是非常重要的,用于改变文件或目录的访问权限。1. 文字设定法 chmod [who][+|-|=][mode] 文件名 例如: chmod g+r,2.统计文件夹下目录的个数 ls -l | grep "^d" | wc -l。1.当前文件夹下的文件个数 ls -l | grep “^-” | wc -l。2. 数字设定法 我们必须首先了解用数字表示的属性的含义:0。7 的八进制数,其 顺序是(u)(g)(o)。表示没有权限, 1 表示可执行权限,使同组和其他用户对文件。
2023-05-11 11:02:29 40 2
原创 Linux命令
Esc+Ctrl+z: 暂时退出编辑模式,fg返回编辑模式继续进行编辑。:w file 将修改另存到file中,不退出vi 编辑。:w file 将修改另存到file中,不退出vi 编辑。强制保存文件并退出vi 编辑。不保存文件并强制退出vi 编辑。强制保存文件并退出vi 编辑。不保存文件并强制退出vi 编辑。强制保存,不退出vi 编辑。强制保存,不退出vi 编辑。:w 保存文件但不退出vi 编辑。:wq 保存文件并退出vi 编辑。q: 不保存文件并退出vi 编辑。:w 保存文件但不退出vi 编辑。
2023-04-17 16:55:59 31
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人