10 2022 档案
摘要:二维数组a[ m,n ],求任意元素a[ i , j ]地址,假设每个元素占d个存储单元, ①以行序存储为主:Loc(a[0,0])+[i*n+j]*d ②以列序存储为主:Loc(a[0,0])+[j*m+i]*d
阅读全文
摘要:程序内存分配中的堆和栈 栈内存存储的是局部变量而堆内存存储的是实体; 栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短; 栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。 C语言中使用malloc开辟空间,C++中使用new开辟空间,(new 和d
阅读全文
摘要:如何实现一个不能被继承的类? 将其构造函数设置成私有类型 若仍要访问? 设置友元类 实现一个可以被继承的类,但不能在外部函数中创建对象的类型? 构造函数设置为受保护类型 实现一个不能被继承的类,但可以在外部函数中创建对象的类型? C11标准下,class 类名 final{};可以实现
阅读全文
摘要:①static_cast(expression)<type-id> 该运算符把expression转换为type_id类型,但没有运行时类型检查来保证转换的安全性,最常用的是基本数据类型之间的转换 ②const_cast(expression) <type-id>上面的static_cast不能将c
阅读全文
摘要:关于满二叉树和完全二叉树: 满二叉树:每个分支节点都存在左子树和右子树,且叶子节点在同一层 完全二叉树:按层序编号,如果编号出现空档,则说明不是完全二叉树,反之则是 已知前序遍历和中序遍历,可以唯一确定一颗二叉树; 已知后序遍历和中序遍历,可以唯一确定一颗二叉树; 已知前序遍历和后序遍历,无法唯一确
阅读全文
摘要:①gcc test.c -o test -g(生成所需文件) ②gdb test (进入gdb模式) ③set args a b(设置参数a,b,空格隔开) ④show args(获取所设置的参数) ⑤使用q或quit退出gdb模式 gdb模式下的命令: 查看当前文件的代码: list 显示行代码
阅读全文
摘要:/ /服务进程 / 精灵进程 运行时间长,不需要与用户交互,后台执行 守护进程编程流程: 1.fork(),创建子进程,退出父进程 2.setsid(),创建新会话 3.fork(),退出父进程,失去会话首进程,组长进程的身份 4.chdir(),改变工作路径 “/ ” 5.umask(),掩码清零
阅读全文
摘要:生产者/消费者问题,也被称为有限缓冲问题。可以描述为:两个或者更多的线程共享同一个缓冲区,其中一个或多个线程作为“生产者“会不断的向缓冲区中添加数据,另一个或者多个线程作为”消费者"从缓冲区中取走数据 生产者和消费者必须互斥的使用缓冲区; 缓冲区空的时候,消费者不能读取数据; 缓冲区满的时候,生产者
阅读全文
摘要:进程间通讯(IPC):管道、信号量、共享内存、消息队列、套接字 管道:有名 无名(有名无名的区别),在内存中写入,通讯方式:半双工 信号量:特殊变量(一般取值大于等于0)例如0、1 代表资源状态 例如3:代表可访问资源个数 可以对其值进行改变 减一:代表获取资源,一般称为p操作,有可能会发生阻塞,等
阅读全文
摘要:复制进程 fork pid_t fork(void) 函数返回类型 pid_t 实质是 int 类型 fork函数会生成一个新的进程,调用fork函数的进程称为父进程,新生成的进程称为子进程,在父进程中返回子进程的pid,在子进程中返回0,fork失败则返回-1 注: 地址一样,指的是逻辑地址,程序
阅读全文
摘要:int main(int argc,char* argv[],char* envp[]) ①argc 参数个数 ②argv* 参数内容 ③envp 环境变量
阅读全文
摘要:首先来介绍一些简单的概念: 1.稳定:如果a原本在b的前面,且a = b,排序后a仍然在b的前面 不稳定:如果a原本在b的前面,且a = b,排序后a可能出现在b的后面 2.十大经典排序算法基本可以分为两类: 非线性时间排序:通过比较来确定元素间的相对次序,时间复杂度最快为O(logN) 线性时间排
阅读全文
摘要:首先区别一些概念: a.定义一个函数为虚函数,不代表函数为不被实现的函数 b.定义某个函数为虚函数,是为了允许用基类的指针来调用子类的这个函数 c.定义一个函数为纯虚函数,才代表这个函数为不被实现的函数 接着来详细介绍虚函数和纯虚函数: 1.虚函数,“虚”就“虚”在所谓推迟联编或动态联编上,一个类函
阅读全文