- 博客(85)
- 收藏
- 关注
原创 内联函数定义与宏定义的区别
内联函数:给编译器的提示,告诉编译器把该函数在调用处展开;内联函数通过避免调用的开销(编译器优化)来提高执行效率。宏:预处理器的输入,之后送去做语法分析,发生在语法分析之前。
2024-12-30 20:30:31
240
原创 static_cast与dynamic_cast的区别
(3)类层次的转换:在向上转换时,static_cast和dynamic_cast效果一样,且static_cast效率更高。static_cast是不安全的,dynamic_cast会进行类型检查,转换失败会返回nullptr。(2)转换目标:static_cast用于C语言强制转换可替代方案,可能存在信息丢失,没有运行时类型检查;dynamic_cast用于类继承层次间转换(上行转换,下行转换,类之间的交叉转换)。(4)运行时代价:static_cast效率更高。
2024-12-20 20:32:09
496
原创 std::move
move的函数参数T&&是一个指向模板类型参数的右值引用,通过引用折叠,可以和任何类型的实参匹配,既可以传递一个左值,又可以传递一个右值。
2024-12-01 15:54:15
407
原创 Cpp面试文章汇总(整理中。。。)
360 C++一面面经 2023.11.25(校招) C/C++核心基础知识高效学习避雷指南2023.12.20(校招) C++ 双非二本三年经验社招面经2023.09.16 (社招)
2024-12-01 14:51:29
396
原创 STL:相同Size大小的vector和list哪个占用空间多?
具体占用多少空间,取决于它们分别存储了多少元素,以及每个元素的大小。则需要至少存储一个节点的信息(包括一个指针指向下一个节点)。随着元素数量的增加,需要连续的内存空间,可能还需要重分配更多的内存来满足增长需求,而。占用的空间更多,因为它需要为存储的元素分配连续的内存空间。同样插入100个元素,vector的占用确实高于list。可能只需要存储一些小的控制信息,而。只需要在列表中增加新的节点即可。是非连续的,分散存储的。是两种不同的序列容器。的差距会更加明显,因为。底层是连续的内存,而。
2024-12-01 14:36:42
393
原创 动态库与静态库
动态链接:没有把库编译进目标文件;程序运行时才加载运行代码(地址无关代码技术,装载时重定位,只做语法检查)动态库:动态加载,运行环境需要指定查找路径(LInux: LD_LINARARY_PATH)2. 接口实现改变:静态库需要重新编译;动态库只需要编译库文件即可。1. 接口改变:不论是动态库还是静态库,都需要重新编译。静态库:静态库存在多个副本(内存和磁盘)静态链接:把静态库编译进目标文件;静态库较快,动态库相比较慢。动态库:只有一个副本。静态库:可以直接运行。
2024-11-16 21:01:12
372
原创 STL整理
假如说我们是以2倍方式扩容(1,2,4,8,16),则第i次扩容期间所需要的空间总量就是2^i次方,如果第4次扩容时总共需要8个元素大小的空间,但是前3次已经释放的空间加起来的总量,刚好是7,而7小于8,不足以我们第4次扩容时所需要的空间,也就是说,如果恰巧以2倍方式扩容,那么每次扩容时前面释放的空间它都不足以支持本次的扩容!!!那么如果是以更高倍数的方式进行扩容,则这个空间它的浪费情况就会更高!!!也就是说,以2倍或者更高倍数的方式进行扩容,会存在2个问题:空间浪费可能比较大。
2024-11-06 22:18:35
926
原创 FFmpeg API
(3)AVCodecContext与AVCodec:编码格式和编码器的抽象。(4)AVPackge:数据包的抽象(未解码的数据)。(2)AVStream:音频、视频或者字幕流。(5)AVStream:数据帧的抽象。:容器或者媒体文件的抽象层次。
2024-10-16 12:14:27
549
原创 CUDA编程基础概念
Device对应为GPU,Host对应CPU,Kernel对应GPU上运行的函数。其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。
2024-10-09 19:58:43
299
原创 多态实现原理
虚函数表指针,类对象构建时创建,也就是运行时创建。构造函数中自动实现,将表地址赋给vptr。注:如果函数名,参数名一致,但是返回类型不一致,那么会出错。
2024-10-09 16:12:37
358
原创 C++什么时候生成默认的构造函数?
(1)如果没有定义构造函数,编译器会默认生成一个,并给成员变量初始化?(2)Class继承了某一个Class,父类Class有构造函数。(1)你的某个Class里边包含另一个Class成员对象。(2)需要时生成是指编译器需要,而不是程序员需要。(3)Class包含虚函数。(4)Class存在虚继承。
2024-10-09 15:48:20
197
原创 strcpy和memcpy
和strcpy要求一样,不可以有内存重叠;目标内存需要足够大,而且需要手动指定长度大小。strcpy主要用来拷贝字符串,直到遇到\0结束为止。必须保证s1中有足够大的内存,因为\0也会被拷贝过去,
2024-10-09 15:22:25
253
原创 extern
一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是相互透明的,也就是说,在编译时,全局变量的可见区域限制在文件内部。extern可以看到别的文件中的全局变量。比如编译FFMpeg,c没有函数重载的概念。
2024-10-09 15:09:58
461
原创 volatile关键字
因为cpp中变量的读取写入会经过缓存,如果是多线程情况,不同的线程对同一个变量可能存在读写不一致的情况,所以通过volatile关键字,让所有线程数据都从主存中读取,保证。1. volatile关键字没有原子性。禁止编译器优化代码。
2024-10-05 08:28:39
207
原创 new/delete和malloc/free
4. new在free store上分配,new的简单步骤:(1)调用operator new(2)申请足够空间(3)调用构造函,在new之后就会拥有物理内存;malloc 如果分配小于128K,内存池分配,否则通过系统调用在堆上分配空间,malloc不是一开始就有物理内存。1. new/delete 是c++的运算符,malloc/free是函数;new自动计算需要分配的空间大小,malloc需要自己指定。malloc时,会默认偏移16字节,这16字节里边包含了空间大小信息。free,传入void*。
2024-09-25 15:31:26
277
原创 C++什么时候生成默认的拷贝构造函数
(2)一个类继承了另一个类,那么基类要有默认的拷贝构造函数。(4)和(3)类似,如果基类有虚函数。基类有虚函数,那么派生类也会有虚函数表。(2)编译器为什么需要帮助我们去生成默认构造函数?,那么如果存在指针一类对象,那么不同对象会持有相同对象资源。为了让b的构造函数也可以调用,那么B也必须有默认的构造函数。(1)用一个对象,当另一个对象的构造参数。(3)类成员中有一个或多个虚函数。(1)类成员也是一个类。
2024-09-24 19:43:01
430
原创 CPP中什么样的类不可以被继承?
那么这个类就不能被继承。因为派生类的构造函数需要调用基类的构造函数,如果基类的构造函数不可访问,那么派生类就无法正确地初始化。,那么这个类就不能被继承。这是C++11引入的一个特性。:如果一个类的构造函数被声明为。关键字:如果一个类被声明为。
2024-09-24 16:35:32
207
原创 左值引用与右值引用
参考:【【C++面试题】左值引用与右值引用的区别?右值引用的意义】 https://www.bilibili.com/video/BV1Kw4m1k7VC/?(4)右值引用,资源管理(避免深拷贝);STL应用,比如vector的emplace_back,也是避免了深拷贝;(1)左值的引用,另外,const 左值引用可以引用右值。本质是函数模板里,对对象的值和属性进行透传。(2)通过std::move对左右值进行相互转换。(3)左值引用,主要为了避免对象的拷贝构造。:++i,--i,解引用(*p)。
2024-09-24 16:23:41
415
原创 智能指针学习笔记
1. 共享指针总体的使用来说是不线程安全的(构造和析构时才会改变引用计数,但是在访问资源时是不安全的)。可以对引用计数改变时加锁,或者将+或-操作改变为原子操作。3. 不可以将shared_ptr转换为unique_ptr。unique_ptr可以转换为shared_ptr,通过std::move。1. 关于int,成员变量的引用计数必须是int*。不可以直接是int,不然没有引用计数的作用。2. 关于是否可以声明为静态成员。不可以,否则每一个相同类型的对象都共享该计数。需要通过weak_ptr进行解决。
2024-09-24 15:25:44
334
原创 内存分区学习
存放动态分配和释放的内容,new 和 delete。(4) 具有多重继承和虚拟功能的对象的内存布局。存放程序的二进制代码和常量,代码段时只读的。(2)同时具有虚函数和静态数据成员的内存布局。此段数据在程序运行前分配,运行结束后释放。存放全局变量和静态变量,程序结束时释放。实现函数调用,编译器自动分配释放。和const 变量的初始值值。(1)简单非多态内存布局。(3)继承对象的内存布局。
2024-09-10 23:06:26
428
原创 const关键字学习补充
如果在外部定义了const Sale_data 常量对象,那么该函数返回的值依然可能会被外部改变。在默认情况下,this指针的类型是指向类的非常量版本的常量指针,例如。C++运行在成员函数后添加const,表示该函数不会修改成员变量。问题1:我在成员函数中确实不做任何修改,为什么还要加const。通过以上伪代码可以发现,成员变量内容不可以修改。问题2:const在指针上的理解。涉及到指针const的内容,
2024-09-09 20:42:45
349
原创 FFmpeg编码03——参数设定
设置视频恒定质量,H264的QP范围是0~51,x264默认是23, 效果较好是18;x265默认是28,效果较好是25.恒定比特率不支持MP4的NAL填充,文件输出必须是ts格式。同时,h265不支持b_frame。
2024-09-08 15:37:27
663
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人