为定制内存分配器适配 Valgrind
引言 Valgrind 是一款强大的二进制分析引擎,一个很常见的用途是检测内存泄漏。 TODO: 基本用法 定制内存分配器 假设我们有一个简单的内存分配器 class Allocator { public: void *allocate(std::size_t nbytes) { } void deallocate(void *p) { } private: uint8_t _memory[4096]; }
引言 Valgrind 是一款强大的二进制分析引擎,一个很常见的用途是检测内存泄漏。 TODO: 基本用法 定制内存分配器 假设我们有一个简单的内存分配器 class Allocator { public: void *allocate(std::size_t nbytes) { } void deallocate(void *p) { } private: uint8_t _memory[4096]; }
引言 很多工具只提供了 UNIX 家族的操作系统的支持,而且很多公司的开发环境是 Linux 服务器。很久以前,想要在 Windows PC 上用 GNU/Linux 只有两个选项:虚拟机和双系统。 两者在跟 Windows 交互时需要比较麻烦的环境配置。YYYY 年开始,我们有了新的选项: 微软开发了 WSL,可以在 Windows 上直接启动 Linux,这对开发带来了极大的便利。 本文以 Arch Linux 为例,介绍 WSL 的安装和配置。 WSL 是什么? WSL2 采用了类似于虚拟机的方案。 安装 Arch WSL 参见文档 基本配置 我们使用 WSL2,因此需要进行一些额外的配置,才能丝滑地使用网络。 WSL2 的配置分为两个部分:Windows 系统上的 ~/.wslconfig 和 WSL 中的 /etc/wsl.conf, 我的配置如下: 首先是 Windows 中的 ~/.wslconfig,内容如下: [wsl2] networkingMode=mirrored (1) dnsTunneling=true firewall=false autoProxy=true (2) guiApplications=true memory=56GB [experimental] autoMemoryReclaim=gradual (3) sparseVhd=true (4) 1 启用“mirrored”网络模式,将 Windows 上的网络接口“镜像”到 Linux 中 2 让 WSL 使用 Windows 的 HTTP 代理信息 3 TODO 4 TODO 然后是 WSL 中的 /etc/wsl....
安装 VS Code 官网下载 小技巧:如果官网下载比较慢,可以把下载地址中的 az764295.vo.msecnd.net 更换为 vscode.cdn.azure.cn 安装 clangd1 在 Arch Linux 上,clangd 在 clang 这个包中,用如下命令安装: $ pacman -S clang 其他平台可能会使用 clang-extra-tools 这个名称 安装完成之后,还需要安装 llvm-vs-code-extensions.vscode-clangd 这个扩展。 生成 compile_commands.json CMake 当然你先需要安装 CMake 项目目录结构如下: . |- CMakeLists.txt |- include | `- demo | `- Support | `- Strings.h `- src `- main.cpp `- Support `- Strings.cpp 使用 cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=1 CMake 目前(2023 年)只能支持 GNU Make 和 Ninja 生成 compile_commands....
使用 Hugo, PaperMod 和 AsciiDoc, 基于 GitHub Pages 创建个人博客
一般而言,在一个产品级别的编译器中,AST 是非常庞大的,这引入了几个问题:(1)除了数据成员外,往往还有很多相应的 getter/setter(所谓的“boiler template code”),人工实现繁琐且容易出错;(2)往往存在需要对大量节点类型进行批量处理的情况,这时如果有成熟的基础框架可以大大提升工作效率。因此,很多产品级的编译器使用了自动生成(部分)AST 定义的方式。本文 Clang 和 Verilator 为例进行研究。