前言
最近在跟着 小彭老师的 CUDA 课程 学习时,发现了一个平时很少用到的 vector 的功能,那就是自定义内存分配器。
通过查看 cppreference,发现 vector 的构造函数有两个形参,一个是 T 类型的对象,另一个是 Allocator 类型的对象, 其中 Allocator 默认为 std::allocator<T>
:
template<
class T,
class Allocator = std::allocator<T>
> class vector;
在往 vector 中插入元素时,会调用 Allocator 的 allocate 函数来分配内存,移除元素时会调用 deallocate 函数来释放内存。
前言
在C++标准库中,std::sort的底层实现通常使用的是混合排序算法,具体来说是introsort(内省排序)。
introsort结合了快速排序、堆排序和插入排序的优点:
快速排序:在一般情况下,std::sort使用快速排序,因为它平均情况下有很好的时间复杂度
O(nlogn)
。它通过选择一个基准(pivot),然后将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归排序。堆排序:快速排序的最坏情况时间复杂度是
O(n²)
,为避免这一情况,当递归深度超过某个阈值时,std::sort会切换到堆排序,确保时间复杂度为O(nlogn)
。插入排序:在数组规模较小的时候,std::sort会切换为插入排序,因为在小规模数据上,插入排序效率更高。
这种组合使得std::sort在处理不同规模和不同结构的数据时,既能保持高效的平均性能,又能避免最坏情况的性能退化。
前言
Libwebsockets is a simple-to-use, MIT-license, pure C library providing client and server for http/1, http/2, websockets, MQTT and other protocols in a security-minded, lightweight, configurable, scalable and flexible way. It's easy to build and cross-build via cmake and is suitable for tasks from embedded RTOS through mass cloud serving.
libwebsockets
是一个简单易用的、MIT 许可的、纯 C 语言库,提供了 HTTP/1、HTTP/2、WebSockets、MQTT 和其他协议的客户端和服务器实现。它以安全为导向,轻量级、可配置、可扩展和灵活。通过 cmake
构建和交叉构建非常容易,适用于从嵌入式 RTOS 到大规模云服务的任务。
留作备忘。
前言
本文主要介绍了 /sys/class/devfreq
和 /sys/devices/system/cpu/cpufreq
目录,以及如何手动管理和监控设备频率和 CPU 频率。同时提供了简单的 Python 脚本,用于打印设备和 CPU 的频率信息。
环境信息:
- 硬件:Friendly NanoPi-R6S
- 固件:rk3588-usb-debian-bullseye-minimal-6.1-arm64-20240131
部分内容由 Github Copilot
自动生成,仅供参考。
前言
cv::Mat
是 OpenCV 中最常用的数据结构之一,本文主要介绍 cv::Mat
的几种传参方式。
在开始之前要说明一下 cv::Mat
的结构,根据官方文档——Mat基本上是一个具有两个数据部分的类:矩阵头(包含诸如矩阵大小、用于存储的方法、存储矩阵的地址等信息)和指向包含矩阵的指针像素值(根据选择的存储方法采用任何维度)。矩阵头大小是恒定的,但是矩阵本身的大小可能因图像而异,并且通常会大几个数量级。
由于矩阵的一些特性,在传参时会有意料之外的结果。
前言
在现代多媒体应用中,实时流媒体传输(RTSP)是一项重要技术。它允许我们将音视频内容实时传输到远程服务器,从而实现实时观看和监控。FFmpeg 是一个强大的多媒体处理工具,支持多种音视频格式和流媒体协议。
本文将介绍如何在 macOS 上使用 FFmpeg 推送 RTSP 流。我们将涵盖以下内容:
- 在 macOS 上安装和配置 FFmpeg。
- 搭建 RTSP 服务。
- 使用 FFmpeg 将本地视频文件推送到 RTSP 服务。
- 使用 FFmpeg 将摄像头视频推送到 RTSP 服务。
通过本文的学习,您将掌握在 macOS 上使用 FFmpeg 进行 RTSP 推流的基本方法和技巧。