
base
文章平均质量分 94
leapmotion
这个作者很懒,什么都没留下…
展开
-
关于malloc/free的一些知识点
chunk被以下数据结构来组织,malloc_state也被称为是内存区,glibc实现的ptmalloc避免多线程并发引入主分配区和非主分配区,每个进程有一个主分配区,也可以允许有多个非主分配区。加锁失败就会继续找next的内存区,直到找到一个可用的内存区,都不可用,就会创建内存区。该环境变量可以用来开启内存错误检查,默认是关闭的,开启后,如果内存分配错误,会调用abort,比如调用free一个没有分配的内存,或者调用malloc一个超过内存限制的内存。下边判断是否是指定的so的内存,如果是就从。原创 2024-09-13 07:55:17 · 709 阅读 · 0 评论 -
从unique_ptr看函数调用约定
本文中其实是两个主题,一个是unique_ptr在参数传递和裸指针对比,unique_ptr使用内存传递,因为unique_ptr内部本身就是封装了指针,这就导致unique_ptr传递时会多一层。也是参考视频中提到的可能没有零成本的抽象吧。另外一个就是我们扩展了下其他类型的参数是走寄存器传递还是内存传递,也举例说明了下。不过这里省略了SIMD类型的参数。其中可能那里不对,请大家指出,共同进步。原创 2024-05-07 07:39:13 · 924 阅读 · 1 评论 -
C++ 如何设计好用的API
好用的c++ api原创 2023-12-13 06:41:02 · 357 阅读 · 0 评论 -
C++与依赖注入
S 单一职责原则O 开闭原则L 里氏替换原则I 接口隔离原则D 依赖倒置原则那与我们相关的也是依赖倒置原则,描述为我们的class应该依赖接口和抽象类而不是具体的类和函数。那么依赖注入也是符合这个原则,简单理解来说就是当依赖的某个对象是通过外部来注入,而不是自己创建。依赖应该大家都是知道的吧,举个最简单的例子:这里我们就可以说Human这个类依赖于Tools,那么我们说的对于这个依赖项是从外部创建继而注入到这个类中。原创 2023-07-07 07:32:53 · 1909 阅读 · 0 评论 -
源码看CAF的线程调度框架
CAF原创 2023-01-15 22:18:16 · 951 阅读 · 0 评论 -
谈谈https和证书
1. 前言本篇文章我们讲解下关于https及证书的相关知识,因为我发现不理解证书感觉很难理解https,所以本篇会花大量的篇幅来讲证书,我们一开始会讲解一些相关概念帮助大家理解下,然后我们自己签发一个证书来理解这个过程,最后通过实例和抓包帮助大家理解https。因为本篇文章有很多代码及配置文件相关,最好通过电脑打开查看,篇幅很长,感谢耐心。2. 概念区分见到https时就会有很多不知道的概念,我们这里来区分下:HTTPS:https即为http及其下边一层的可靠的安全加密的传输协议(tls/ssl)原创 2021-10-30 20:40:03 · 7487 阅读 · 0 评论 -
内存模型下的顺序一致性
什么是内存模型在多核多线程环境下,多个CPU是如何以一种统一的方式来与内存交互的,这里包括内存地址对线程的可见性,cpu对内存的访问的顺序性。关于乱序我们先来看代码:#include <thread>#include <iostream>using namespace std;bool ok = true;int val = 0;void foo() { while (1) { if (!ok) { cout &l原创 2020-08-05 08:04:57 · 515 阅读 · 0 评论 -
自己实现简单的动态分配器
自己实现简单的动态分配器前言动态内存分配分配器的要求碎片实现问题空闲块的组织结构前言本文简单论述下动态分配的原理,并自己实现一个最简单的动态分配器,本文完全参照《深入理解计算机系统》,以此来当做一个笔记记录一下学习历程。下边就进入正文。动态内存分配可执行程序运行时被加载到内存中,这个进程的虚拟内存区域分成几部分,这个我们之前的文章讲过。动态内存分配器就是维护着虚拟内存中的堆。堆区域想上生长(向更高的地址)。分配器有两种基本风格。两种风格都要求应用程序显式的分配块,他们的不同之处在于由哪个实体负责释原创 2020-06-21 16:17:25 · 626 阅读 · 0 评论 -
chromium的base源码阅读之scoped_refptr
简介我们之前对C++标准库的智能指针有了一定了解,今天我们来聊一聊Chromium中base的智能指针-scoped_refptr,该智能指针同样是采用引用计数的方式来控制指针的创建和析构。接下来我们看下源码来解读下,源码在base下的memory/ref_counted.h下(utable, discopy)Base类namespace subtle {class BASE_EXPO...原创 2019-12-06 22:11:53 · 1180 阅读 · 0 评论 -
volatile的解读
简介我们来讲一下volatile这个关键字,在很多语言中都会涉及到这关键字,首先我们来讲一下计算机的一些运行规则,其次我们简单来浅析一下这个关键字的定义,然后通过实例讲一下这个关键字的用处,及和memorybarrier的比较。计算机运行规则首先我们可能以为cpu运行指令无非是取指,译指,执行指令,存取数据,我们所接触到的都是这样顺序的,然而实际上cpu为了提高执行效率,再加上现在计算机都是...原创 2019-11-27 22:03:05 · 637 阅读 · 2 评论 -
chromium的base源码阅读之Callback一
简介本文描述下chromium使用base库中的callback,相关代码位于base库的根目录下的callback及callback相关,bind及bind相关的,本系列本人只是简单说一下自己的感受,有些存在的问题还望大家一块讨论。相关base库timer讲解可参考 chromium的base源码阅读之Timer.callback是chromium自己封装的回调函数,需要配合bind使用,...原创 2019-07-22 12:06:31 · 1123 阅读 · 0 评论 -
C函数调用过程
介绍本文从机器级的层面来介绍下函数的调用过程,读自《深入理解操作系统》第三章虚拟内存虚拟内存是内存管理的一种方式,它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),实际上是对主存和磁盘I/O设备的抽象表示。根据功能不同我们把虚拟内存自上而下(高地址到低地址)划分为我们常见得以下几个部分:内核空间:总是驻留在主存中,一般来说是操作系统的一部分,不为应用使用栈:是由编译器...原创 2019-05-10 12:01:47 · 1136 阅读 · 0 评论 -
chromium的base源码阅读之Timer
简介本文介绍chromium的base的timer的源码,地址在https://github.com/chromium/chromium/tree/master/base,我们讨论在base中是如何实现一个timer的。windows下的timer我们先来看看windows下如何实现一个简单的timer的class A{public: void static CALLBACK ...原创 2019-02-17 16:58:41 · 2078 阅读 · 3 评论 -
C++ 实现序列化
本文大概讲下用C++实现序列化本文的序列化:简单的讲是将C++里的对象(此处是广义上的对象,内置类型或者用户自定义类型)数据变成char*,即单个字节的数据,这样方便传输等本文要求有一点C/C++基础涉及到的知识点有C++中的函数重载,操作符重写,allcotor,左值和右值,继承,模板等序列化: 数据对象 =====> 字节数组反序列化: 字节数组 ==...原创 2018-11-03 17:11:27 · 23855 阅读 · 15 评论