环境变量与进程控制 各种shell指令本质上也是可执行程序,但不需要加上./即可执行(./是为了指明路径,在当前目录下寻找可执行程序)下有两种不加./即可执行程序的方法——1.将这个程序移至/usr/bin/下(可能会污染指令库,不建议)2.修改默认路径,也就是环境变量PATH,指令为——export PATH=该程序所在绝对路径(会覆盖原有路径,致使shell瘫痪)export PATH=$PATH:该程序所在绝对路径。
进程与多进程实现 程序是什么,进程是什么,二者的区别又是什么——程序是存放在磁盘的可执行文件——也就是一系列的指令集合,而进程可以说是被加载到内存的程序,是程序的一次执行过程——同一程序可能会有多个进程执行。也就是说程序是静态的,进程是动态的。进程的组成——进程是由内核数据结构和进程对应的磁盘代码组成的。在Windows下,这个内核数据结构是PCB(Process Control Block);在Linux下,这个内核数据结构是task_struct,本文围绕Linux讨论。
集合论与位运算的结合 —如:现有集合(集合中元素皆为非负整形)A = {1,2,3},那么这个集合就可以用二进制1110₂来表示——集合中的元素n如果存在,其对应二进制的(n - 1)位就为1,不存在就为0。如果要对两个哈希表取交集,这就需要遍历两个哈希表,效率不高。增加元素对应着将该元素所对应的二进制位改为1:如在上述的集合A中加上5这个元素,就是A∪{5},也就是将其二进制数0011110变为0111110,这里设 a = 0011110,将1左移五位再与a按位或即可实现,(1 << 5) | a = 0111110。
系统编程基础与Linux下的集成开发环境 Linux下一切皆文件,Linux中的权限自然也就是与文件相关的权限。用户:owner, grouper , other文件属性:r(read) , w(write) ,x(execute)文件类型:- 普通文件——如源代码,库文件,可执行程序,文件压缩包等d 目录文件;l 链接文件;p 管道文件;c 字符设备文件;b 块文件;s socket文件有了以上认识,再看下文件的各个属性:第一个字符为-, 说明是一个普通文件;
C++类和对象——入门 后C++引入class(此时还不叫“C++”,而是“C with Classes”,在1983被正式更名为C++),可以理解为一个可以定义函数的结构体(二者略有不同)由inline修饰的函数会在编译阶段于调用函数处展开,并不会调用函数(这种情况仅在被inline修饰函数的内容较少时出现,具体由编译器判断)类的大小为成员变量之和,但成员函数被放在公共代码段,不被算入大小,空类大小为一。对象则是其具体化实现、是类的实例,具体实现类定义的属性和行为。类的成员变量是另一个类的实例,上述代码中;
C++引用——类型+&+对象 事实也确实如此,在C++语法中,引用无法重新被赋值。返回值如果为非引用类型,编译器就会创建一个临时变量来持有返回值,引用类型返回值则不会(具体原因和证明就不再赘述,以后再详细展开吧)所以为了追求极致的性能,C++在能用的地方肯定是选择引用类型的返回值。但引用不一样,如果引用不进行初始化,代码是直接无法运行,并且引用的初始化赋值只能是一个对象,无法用NULL或者是nullptr对其初始化。并非如此,用引用变量接收后,它就变成了一个纯正的引用变量,编译器会自动处理,不再像指针一样需要自己去进行解引用操作。
C++函数重载——拙见 原因分析:main函数位于.cpp文件之中,自然按照.cpp语法编译,此时的Add函数被重载为Add@@YAHHH@Z,Add函数的实现在.c文件中,按照c语法编译为Add。代码经过预处理->编译->汇编,到链接时,主函数用Add@@YAHHH@Z去找.c文件之中的Add,能找到吗?例如:main函数位于test.cpp文件,且main函数前已申明Add函数。用extern "C"声明函数,编译器就会以C的标准去编译这个函数,自然也就能用Add去找到Add函数的地址。