主页

C++编译器傻傻分不清楚?

#AskCpp06 C++编译器傻傻分不清楚? 编译器是什么? 编译器是一种将源代码编译成目标代码的程序。 这里的源代码通常指高级语言写的程序,目标代码为汇编语言或者机器码。 现代编译器系统的一般流程: 源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(linker)→ 可执行文件(executables) 编译器的分类: 本地编译器(编译出与编译器所在系统平台相同的程序) 交叉编译器(编译出在不同平台上运行的程序) C++ 编译器 C++ ...

阅读更多

静态库与动态库

#AskCpp02 VS中的静态库与动态库 什么是静态库? 什么是动态库? 两者有什么区别? 在 VS 中 创建静态库 使用静态库 创建动态库 使用动态库 在 Qt 中 创建静态库 使用静态库 创建动态库 使用动态库 其他 如何查看一个 dll 有哪些函数? 怎样判断一个 dll 是 64 位还是 32 位? 参考 《维基百科》 《程序员的自我修养–链接、装载与库》 https://www.cnblogs.com/skynet/p/3372855.html https://docs.microsoft.com/zh-cn/cpp/build/walkthrough-creating-and-using...

阅读更多

有什么好的开源库值得一读?

#AskCpp05 有什么好的开源库值得一读? 目的 通过源码学习 C++ 技术 能给当前工作带来帮助 为以后面试作准备 要求 公认好项目 还看得懂 最好有相关源码解析的书籍或教程 哪里找项目 知乎上看回答 Google 直接搜索 GitHub 搜索 同事、朋友帮忙推荐 找到了哪些项目 SGI STL 侯捷的《STL 源码剖析》选择的是 SGI STL 源码,此源码注释丰富、结构清晰、在众多 STL 实现版本中可读强,并可以依据书籍来阅读。 levelDB Google 开源的 k-v 数据库管理系统,Google 精品,众多网友推荐。 SQ...

阅读更多

时间复杂度和空间复杂度

#AskCpp04 如何考量算法的效率? 时间复杂度 算法的时间复杂度(Time complexity)是一个定性描述该算法运行时间的函数,记作 T(n)。 但是,一个算法的运行时间必须得在计算机上运行测试才能确定,无法从理论上计算出来。实际中,我们只需要比较算法花费时间的差别即可,并不需要每个算法都上机测试。并且,算法花费的时间与算法中语句执行的次数成正比,这个执行次数称为语句频度或时间频度,也记为T(n)。 **通常表示为 T(n) = O(f(n)) ** 大 O 符号用来表述时间复杂度。 f(n) 是一个辅助函数,随着算法的输入大小 n 的增大,其执行时间的增长速度可以用 f(n) 来描述。 举例 void func(int n) { for(...

阅读更多

可变长度数组

什么是可变长数组? 是否遇到过定义一个数组,但长度不确定,因为这个长度是根据其他条件来确定的,这种情况下就需要定义一个变长数组。 可变长数组是指数组对象的长度在运行时(而不是编译时)确定。 两种方式使用 用 new int len = 6; int *p = new int[len]; // 运行时确定的长度 用 vector std::vector<int> v = {1, 2}; v.push_back(3); // 改变了数组长度 还可以自定义可变长度数组类 从略 参考 https://zh.wikipedia.org/wiki/%E5%8F%AF%E5%8F%98%E...

阅读更多

三次握手、四次挥手

对不起!刚开始就没有完成任务。 看了很多篇文章,有总结得很详细的,也有图解的。但要化为自己的理解,我还做不到,不理解,写不出东西来。 暂且作为待办吧! 打算在《TCP/IP 详解》三卷书籍中找找答案。最好用网络抓包工具去实际看看。 三次握手 四次挥手 参考 https://zhuanlan.zhihu.com/p/53374516 https://juejin.im/post/5d9c284b518825095879e7a5 https://hit-alibaba.github.io/interview/basic/network/TCP.html

阅读更多

代码在内存中的什么位置?

内存分区 C/C++ 内存其实只分为两个区:代码区和数据区。 数据区:栈、堆、全局/静态存储区、常量区。 栈(Stack):由编译器自动分配和释放,存放函数参数、局部变量等。 堆(Heap):由程序员分配释放,管理不力可能造成内存泄露。 代码区:存放函数体的二进制代码,只读。 so,代码存在代码区! 参考

阅读更多

怎样检测内存泄露?

何为内存泄露? 内存泄露(Memory leak):指动态申请的内存没有及时释放。 后果 泄露导致可用内存越来越少,最终程序奔溃。 如何检测? 手动检测 简单地在 malloc/free,new/delete 处加日志记录。 重载 malloc/free,new/delete,记录调用的次数,在程序结束时进行检测。 运用工具 Valgrind 等。 或通过 IDE,如 vs 的调试功能等。 参考 https://zh.wikipedia.org/wiki/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F https://yq.aliyun.com/articles/337106

阅读更多