吃亏经验!
文章平均质量分 71
怎么这么帅啊
这个作者很懒,什么都没留下…
展开
-
【踩坑记录】.bss段;.bss段到底占不占目标文件的空间,有没有记录对应信息。
.bss段到底占不占目标文件的空间,有没有记录对应信息。原创 2022-01-14 17:50:15 · 848 阅读 · 0 评论 -
【C/C++】汇编解析:函数调用的压栈、弹栈过程;
文章目录前言常见指令待分析代码release 模式下分析 (单纯的压栈弹栈过程)debug 模式下分析 (主要是看rep 指令初始化的问题)总结前言首先知道release下就算关闭优化也和dubug下的汇编差了很多,主要是debug 要有很多调试信息存在;如果只需要分析函数调用过程,那么直接看关闭了优化的release 的代码即可;栈空间的开辟与释放,是没有默认初始化的过程的,直接减sp指针或者恢复sp指针即可;所以会存在报错:局部变量不初始化就直接使用;常见指令rep 指令主要是循环原创 2021-09-10 20:50:22 · 1055 阅读 · 1 评论 -
【踩坑记录】【C/C++】数组名与指针的关系;数组名取地址;数组名的解引用与取地址;
文章目录前序知识指针与数组名的区别验证一维数组二维数组参考前序知识获取变量类型的语句是:typeid(variable).name();sizeof函数在编译阶段起作用。指针与数组名的区别C专家编程 中有讲到,数组和指针在编译器处理时是不同的,在运行时的表示形式也是不一样的,并可能产生不同的代码。对编译器而言,一个数组就是一个地址,而一个指针就是一个地址的地址。数组名是不可修改的左值,不能直接对其赋值(定义时除外)。但可以用memcpy,strcpy等来进行间接“赋值”。讲原创 2021-08-20 21:39:27 · 339 阅读 · 0 评论 -
【吃亏经验】segment fault 及其原因;stack-overflow 及其原因
文章目录一、 segment fault1、segment fault 起因2、 linux 下的segment fault3、错误引起:二、stack-overflow1、stack-overflow 起因一、 segment fault1、segment fault 起因今天牛客网做笔试的时候,报错segment fault ,起初并不知道什么情况;(不同平台可能隐藏了不同报错的方式)挨个打印发现了是越界问题;之前在windows 环境下越界问题都是报错越界问题;2、 linux 下原创 2021-08-07 17:34:28 · 954 阅读 · 0 评论 -
【学习笔记】placement new、定位new 运算符的应用;指定空间构造;placement new的优势;
文章目录一、参考二、placement new 简介三、应用一、参考【C++ primer plus】P. 321【学习笔记】【C++整理】【总】二、placement new 简介placement new 能指定要使用的位置;placement new 就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数优势:在已分配好的内存上进行对象的构建,构建速度快。已分配好的内存可以反复利用,有效的避免内存碎片问题三、应用在全局申请好原创 2021-08-05 16:47:41 · 159 阅读 · 0 评论 -
【踩坑记录】【C++】STL中sort 用的是快排吗?:根据数据量和递归深度选择快排、堆排(heap sort)、插入排序;
文章目录一、插入排序的优势:二、STL 对快排和插入排序的抉择:三、意外而来的堆排;四、总结一、插入排序的优势:插入排序复杂度虽然是O(n^2);但是其时间复杂度中常数项小,并在优化情况下,小数据量时,有更快的优势;其他复杂排序,有递归等操作带来的额外的负荷;我这版STL中,判断用快排还是用插入排序的阈值选用的时32 ;二、STL 对快排和插入排序的抉择:侯捷的 STL 源码剖析中讲到的是16以下的数据用插入排序,以上用快排;而我这版的STL sort ,参数修改成为了32 ;上图为原创 2021-08-05 09:54:11 · 689 阅读 · 4 评论 -
【踩坑记录】priority_queue 第三个模板参数和sort 的第三个形参的区别;仿函数、自定义排序函数、lambda 函数分别传入;传入类型和对象的区别;
文章目录priority_queuesortpriority_queue priority_queue<int,vector<int>,greater<int>> q; auto cmp = [](const int & a, const int & b) {return a < b; }; priority_queue<int, vector<int>, decltype(cmp)> que4(cmp);原创 2021-08-04 22:28:31 · 777 阅读 · 1 评论 -
【C++ 】【move 、移动语义】左值、右值;左值引用、右值引用;移动语义;move的使用;实现资源让渡;配合unique_ptr;
系列文章目录提示:文章目录系列文章目录前言一、左值/右值?1.1 定义1.2 右值能修改吗?二、左值引用/右值引用?2.1引入右值引用2.2 引入右值引用的意义/目的三、move/forward?//待更新参考前言提一、左值/右值?1.1 定义左值与右值(lvalue/rvalue)这两概念是从 c 中传承而来的。在 c 中,左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式)。右值指的则是只能出现在等号右边的变量(或表达式)。右值不能当成左值使用,但左值可以当成右值使原创 2021-05-05 21:31:24 · 822 阅读 · 2 评论 -
【踩坑记录】const 引用作为形参,实际上也是有拷贝存在的;常量引用、const 引用接受常量的时候,会构造一个临时变量出来;
文章目录结论:应用:证明:-通过反汇编证明代码实现;证明:- C++ primer 讲解结论:const 引用因为能接受范围大,可以接受常量,所以被经常使用;const 引用 被传入常量时,还是会在栈中构造一个匿名变量(临时变量)然后引用指向这个变量;应用:我们经常会将常量直接传入函数,(当函数形参为常量引用时候);如下面第二次的func调用我本来以为直接传入常量,引用指向的空间是常量存在的静态区;后来好奇看了一下发现不是;书上也明确有讲出会构造临时变量;void func(原创 2021-07-27 22:12:49 · 344 阅读 · 0 评论 -
【踩坑记录】虚函数表是什么时候生成的,虚函数表地址是什么时候给对象的;虚表指针是在构造函数之前就给了对象了;
文章目录一、虚函数表二、首先讲一下结论:三、证明一、虚函数表虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址。二、首先讲一下结论:首先,虚函数表在编译时候就已经确定;对象在构造前就已经分配好内存,在进入构造函数之前就已经将虚函数表地址给了对象了;进一步的,虚函数表给对象,在初始化列表之前;我们都知道初始化列表先于构造函数函数体实现;于是顺序如下:构造父类;将子类虚函数表地址给子类对象;初始化列表,初始化;构造函数本体;构造父类的时候,也是这样一个步骤原创 2021-07-25 21:41:05 · 3276 阅读 · 0 评论 -
【C++】为什么构造函数不能是虚函数(没有意义,不能实现多态);构造函数内能调用虚函数吗(可以,不能实现多态
文章目录一、虚析构函数二、构造函数为什么不能是虚函数?三、虚构造函数没有意义:1、首先是C++ Primer Plus 的解释:2、C++之父的解释参考一、虚析构函数虚析构函数是为了析构对应的对象,而不是指针指向谁就析构谁;主要是为了多态的使用;所以去虚函数表中找这个对象的析构函数来析构;进而析构其父类;二、构造函数为什么不能是虚函数?虚构造函数不是不能,而是没有意义。首先,构造函数不被继承,构建派生类的时候,也会构建基类,虚构造没有意义;C++ 作者的解释为,虚函数为了多态设计,原创 2021-07-22 21:01:55 · 966 阅读 · 0 评论 -
【heap-use-after-free问题】leetcode测试的时候遇到heap-use-after-free;链表成环问题
目录题目:链表题;问题发现问题!!!解决问题!!!题目:链表题;86. 分隔链表问题用栈做完了,想用指针做一次;思想很清晰;拜倒在了最后一步;代码如下:class Solution {public: ListNode* partition(ListNode* head, int x) { ListNode* _less = new ListNode(-1); ListNode* _more = new ListNode(-1);原创 2021-07-07 09:58:04 · 560 阅读 · 0 评论