拨开字符编码的迷雾(5)--Qt字符编码

我们以“测试字符串-보고싶다-Test String.”这个字符串来进行讲解,它包含了英文、中文和韩文。因为我使用 Qt 的方式是Visual Studio + Qt库的形式,所以本文以Visual Studio的MSVC编译器为例来进行讲解,但这种方式的原理也适用于其他编译器。 QString 中使用 QChar 来存储每一个字符,QChar 是 short 类型,占 2 个字节,默认按 Unicode 编码存储。 首先,为了保证写到代码文件中的测试字符串能被 MSVC 编译器理解,我们需要将源文件保存为Utf8-带签名的格式。具体参考:拨开字符编码的迷雾(2)--编译器处理文件编码

Qt

Windows内存体系(7)--使用std::string跨MT模块传参

前面的Windows内存体系(6)--跨模块内存分配释放文章解释了跨 MT 模块分配的内存相互释放为什么会崩溃的问题,本文介绍如何解决该问题。

Windows编程

Wav音频编码

一. WAVE 简介WAV格式是微软公司(Microsoft)开发的一种声音文件格式,它符合 RIFF(Resource Interchange File Format)文件规范,用于保存 Windows 平台的音频信息资源,被 Windows 平台及其应用程序所广泛支持。 WAVE 是录音时用的标准的 WINDOWS 文件格式,文件的扩展名为“WAV”,数据本身的格式为 PCM 或其他压缩数据,属于无损音乐格式的一种。 所有的 WAV 都有一个文件头,这个文件头记录了音频流的编码参数。WAV文件 = WAV头 + PCM数据。

音视频编程

Windows内存体系(6)--跨模块内存分配释放

在《Windows核心编程 第五版》第19章 DLL基础(511页)中给出了一个建议: “当一个 MT 版本的模块如果提供一个内存分配函数的时候,它必须同时提供另一个用来释放内存的函数。”。 说得更加直白一点就是,“对于 MT 的模块,不要跨模块进行内存释放。”。但是核心编程这本书上面没有具体分析原因,本文就来分析具体的原因。

Windows编程

WebRTC官方示例apprtc搭建

系统环境 Ubuntu 16.04,在搭建之前建议关闭系统防火墙。 一. 房间服务器搭建1.1 安装依赖程序1apt-get install git unzip lrzsz nodejs npm automake autoconf libto...

音视频编程

Windows内存体系(5)--堆

一、为什么要使用堆 (Heap)?应用程序虽然可以使用页面粒度的函数(如VirualAlloc)来分配一个最小为4KB或8K的内存块,但是很多时候我们并不需要分配这么大的内存块,我们可能只想分配 1K,2K 的内存块,那么这个时候无论从内存的使用率,还是从性能的角度来看,再分配这么大的一个内存区域显然不是最优的了。 为了满足这种需求,Windows 提供了一个被称为“堆管理器”的组件,它负责管理大内存区域中的内存分配,这些大内存区域就是通过一些页面粒度的内存分配函数(如VirualAlloc)来预定(reserve)的。 堆管理器中的分配粒度相对比较小:在32位系统上是8字节,在64位系统上是16字节。 堆管理器已经被 Windows 系统精心设计,在这些小内存分配的情况下会进行内存使用率和性能两个方面的优化。

Windows编程

Windows内存体系(4)--内存对齐

一、内存为什么要对齐虽然所有的变量都是保存在特定地址的内存中,但最好还是按照内存对齐的要求来存储。这主要出于两个方面的原因考虑: 平台原因:不是所有的硬件平台(特别是嵌入式系统中使用的低端处理器)都能访问任意地址上的任意数据,某些硬件平台只能访问对齐的地址,否则会出现硬件异常。 性能原因:如果数据存放在未对齐的内存空间中,则处理器访问变量时需要进行两次内存访问才能完整读取该变量的值,而对齐的内存访问仅需一次访问。

Windows编程

Windows内存体系(3)--内存映射文件

一、为什么需要内存映射“内存映射文件”可以将硬盘上的文件映射到虚拟地址空间,这样就不需要将所有东西都放入到页交换文件中,比如系统有许多程序同时运行时,如果将这些程序文件都加载到页交换文件中,页交换文件将会变得非常大。事实上,Windows 也并没有将硬盘上的程序文件复制到页交换文件中,因为这样不仅会让页交换文件将会变得非常大,也会浪费很多时间,特别是可执行程序非常大的时候。 当用户要求执行一个应用程序时,系统会打开该应用程序的.exe文件,并计算出应用程序的代码和数据的大小,然后系统会在进程的虚拟地址空间预定一块地址空间,并注明与该区域相关联的物理存储器就是.exe文件本身。 当把一个位于硬盘上的文件(可以是.exe,.dll也可以是普通文件)映像用作地址空间区域对应的物理存储器时,我们称这个文件映像为“内存映射文件”。

Windows编程
1161718192023