上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 43 下一页
摘要: 一、C++ 内存区域 C++ 内存分为 5 个区域: 堆 heap : 由 new 分配的内存块,其释放编译器不去管,由程序员自己控制。如果程序员没有释放掉,在程序结束时系统会自动回收。涉及的问题:“缓冲区溢出”、“内存泄露”。 栈 stack : 是那些编译器在需要时分配,在不需要时自动清除的存储 阅读全文
posted @ 2021-04-13 20:07 fengMisaka 阅读(1050) 评论(0) 推荐(0) 编辑
摘要: 一、vector 概述 vector 的数据安排以及操作方式,与 array 非常相似。两者的唯一差别在于空间的运用的灵活性。array 是静态空间,一旦配置了就不能改变。 vector 是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此, vector 的运用对于内存的合理利 阅读全文
posted @ 2021-04-06 16:35 fengMisaka 阅读(698) 评论(0) 推荐(0) 编辑
摘要: 迭代器的失效问题:对容器的操作影响了元素的存放位置,称为迭代器失效。 失效情况: 当容器调用erase()方法后,当前位置到容器末尾元素的所有迭代器全部失效。 当容器调用insert()方法后,当前位置到容器末尾元素的所有迭代器全部失效。 如果容器扩容,在其他地方重新又开辟了一块内存。原来容器底层的 阅读全文
posted @ 2021-04-06 14:39 fengMisaka 阅读(11962) 评论(2) 推荐(4) 编辑
摘要: 一、什么是死锁? 如果你将某个mutex上锁了,却一直不释放,另一个线程访问该锁保护的资源的时候,就会发生死锁,这种情况下使用lock_guard可以保证析构的时候能够释放锁,然而,当一个操作需要使用两个互斥元的时候,仅仅使用lock_guard并不能保证不会发生死锁,如下面的例子(双线程多锁申请) 阅读全文
posted @ 2021-04-06 11:19 fengMisaka 阅读(2252) 评论(0) 推荐(0) 编辑
摘要: 一、前言 由于 FFmpeg 是使用 C 语言开发,所有和函数调用都是面向过程的。所以这里全部代码先放在 main 函数中实现,经过测试和修改后功能正常,再以 C++ 面向对象的方式逐步将代码分解和封装。 二、效果展示 下面代码只先实现音视频解码,解码数据写入文件。解码后的 RGB 和 PCM 数据 阅读全文
posted @ 2021-03-31 19:55 fengMisaka 阅读(1513) 评论(0) 推荐(1) 编辑
摘要: 一、前言 在正式编写 FFmpeg 播放器前,我们需要先简单了解下所要用到的 FFmpeg 库、播放与解码流程、函数和相关结构体。 二、FFmpeg 库简介 库 介绍 avcodec 音视频编解码核心库 avformat 音视频容器格式的封装和解析 avutil 核心工具库 swscal 图像格式转 阅读全文
posted @ 2021-03-31 19:50 fengMisaka 阅读(2743) 评论(1) 推荐(1) 编辑
摘要: 一、std::async介绍 std::async用于创建异步任务,实际上就是创建一个线程异步执行相应任务,它接受回调(即函数或函数对象)作为参数。 std::async就是异步编程的高级封装,相当于封装了std::promise、std::packaged_task加上std::thread,基本 阅读全文
posted @ 2021-03-25 14:18 fengMisaka 阅读(4470) 评论(0) 推荐(1) 编辑
摘要: 一、C++11为什么要引入std::future? 我们经常会遇到需要从线程中返回异步任务结果的情况。例如在程序中,我们创建了一个压缩给定文件夹的线程,并且我们希望该线程能够返回新的 zip 文件的名称和大小。 在 C++11 之前的老方法是使用指针在线程间共享数据: 传递一个指针到新的线程中,该线 阅读全文
posted @ 2021-03-25 14:17 fengMisaka 阅读(3610) 评论(0) 推荐(2) 编辑
摘要: 一、问题场景 互斥锁std::mutex是一种最常见的线程间同步的手段,但是在有些情况下不太高效。 假设想实现一个简单的消费者生产者模型,一个线程往队列中放入数据,一个线程往队列中取数据,取数据前需要判断一下队列中确实有数据,由于这个队列是线程间共享的,所以,需要使用互斥锁进行保护,一个线程在往队列 阅读全文
posted @ 2021-03-25 14:14 fengMisaka 阅读(804) 评论(0) 推荐(0) 编辑
摘要: 一、C++11为什么要引入原子操作? 首先为什么会有原子操作呢?这纯粹就是 C++ 这门语言的特性所决定的,C++ 这门语言是为性能而生的,它对性能的追求是没有极限的,它总是想尽一切办法提高性能。互斥锁是可以实现数据的同步,但同时是以牺牲性能为代价的。口说无凭,我们做个实验就知道了。 我们将一个数加 阅读全文
posted @ 2021-03-25 14:13 fengMisaka 阅读(1858) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 43 下一页