在C++中内存管理是一个老生常谈的话题,我们都知道在C语言中使用malloc和free管理动态内存,C++中也有相应的Allocator;
但究竟内存分配器底层是干什么的,本文通过实现一个简单的内存分配器来管中窥豹;
本文翻译自:
源代码:
在C++中内存管理是一个老生常谈的话题,我们都知道在C语言中使用malloc和free管理动态内存,C++中也有相应的Allocator;
但究竟内存分配器底层是干什么的,本文通过实现一个简单的内存分配器来管中窥豹;
本文翻译自:
源代码:
LevelDB 是一个持久化的 k/v 数据库,Chrome浏览器中涉及的 IndexedDB,就是基于 LevelDB 构建而成的;
本文讲解了如何简单的使用 LevelDb,后面也会继续写系列文章对LevelDB的源码进行分析;
源代码:
有的时候我们想要跟踪我们的代码到底分配了多少的内存,一个常用的方法是使用 Valgrind 工具进行内存分析;
但是对于一些场景,我们不想这么麻烦,那么此时我们可以通过简单的覆盖 malloc、free 等函数实现!
源代码:
在前一篇文章《浅谈函数调用》中,我们讲述了函数调用的底层实现,也看到了函数是如何切换上下文,并保存相关信息的;
本文在上篇文章的基础之上,探讨最近非常火热的协程的底层实现,剖析开源库 libco 的实现,并在此基础之上实现一个简单的协程;
源代码:
相关文章:
在任意一门编程语言中,函数调用基本上都是非常常见的操作;
我们都知道,函数是由调用栈实现的,不同的函数调用会切换上下文;
但是,你是否好奇,对于一个函数调用而言,其底层到底是如何实现的呢?
本文讲解了函数调用的底层逻辑实现;
相关文章:
由于历史原因,C++存在多个厂商的编译器,主流的包括GCC、G++、MSVC、clang等;
本文介绍了这几个编译器之间的关系,以及各个编译器常用的命令参数;
在前面的文章《深入理解C++中的move和forward》中,我们提到了为了避免对数据进行复制,在C++11中增加了move语义;
本文继续这个话题,来聊聊关于编译器优化中的RVO;
关于前一篇文章:
源代码:
GoogleTest是Google开源的一个测试框架,使用这个框架我们可以很方便的对我们的项目进行测试;
本文讲述了GoogleTest的基本使用;
源代码:
在C++11标准之前,C++中默认的传值类型均为Copy语义,即:不论是指针类型还是值类型,都将会在进行函数调用时被完整的复制一份!
对于非指针而言,开销及其巨大!
因此在C++11以后,引入了右值和Move语义,极大的提高了效率;
本文介绍了在此场景下了两个常用的标准库函数:move和forward;
源代码:
fmt库是一个先进的文本格式库,具有现代语言的特征,用来代替C的stdio和C++中的iostreams;
本文讲解了如何使用C++的开源库:fmt;
源代码:
开源库地址: