![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 63
松哥小课堂
这个作者很懒,什么都没留下…
展开
-
【百度brpc源码阅读】内存管理
源代码:1、https://github.com/apache/incubator-brpc/blob/master/src/butil/resource_pool.h2、https://github.com/apache/incubator-brpc/blob/master/docs/cn/memory_management.md说明文档:https://github.com/apache/incubator-brpc/blob/master/src/butil/resource_pool_inl.原创 2020-10-23 18:30:53 · 353 阅读 · 0 评论 -
brpc源代码分析-定时器Timer
源代码地址:https://github.com/apache/incubator-brpc/blob/master/src/bthread/timer_thread.h阅读源代码,不仅可以了解到功能的具体实现方法,还能够学习大神们的思考和设计思路。所以在未来一段时间,通过阅读分析源代码的方式,研究brpc的实现和设计思路。本节首先从定时器开始。定时器相关文档:https://github.com/apache/incubator-brpc/blob/master/docs/cn/timer_keep原创 2021-03-18 15:45:20 · 590 阅读 · 0 评论 -
【brpc】ResourcePool详解
原地址:https://github.com/apache/incubator-brpc/blob/master/src/butil/resource_pool_inl.h说明文档:https://github.com/apache/incubator-brpc/blob/master/docs/cn/memory_management.md// Licensed to the Apache Software Foundation (ASF) under one// or more contrib原创 2021-03-16 17:07:17 · 603 阅读 · 0 评论 -
[C++基础]
今天看代码,看到别人include了variant,所以在网上找了一下。发现https://zhuanlan.zhihu.com/p/57530780这个文章不错,特此记录。原创 2020-12-21 15:44:52 · 71 阅读 · 0 评论 -
【C++基础】宏定义
在C/C++编程中,宏是经常用到的一种编程技术。虽然之前的编码中,经常用到宏,但是理解并不深入和准确,特此在此总结一下。宏的作用:在预处理阶段,实现展开完成代码的替换。核心的功能就是完成源代码的替换。本文主要介绍一般宏的定义,#及##的使用。1、一般使用方法:#define Test(x, y) x + yint main(){ int a = 10; int b = 5; Test(a, b); return 0;}替换完之后的效果:int main(){原创 2020-12-14 18:20:57 · 704 阅读 · 0 评论 -
【brpc】WorkStealingQueue注释解读
注解brpc.WorkStealingQueue用来在一个线程之内存储准备被处理的任务。只有本线程可以push或者pop任务,所以这两个接口不会同时有多个线程访问。另外一个接口steal()用来让其他线程有机会从本线程偷得任务,所以steal可能和push、pop以及steal同时被调用。比较有意思的设计:队列的bottom和top支持增长,采用和(capacity-1)按为&的方式,确定实际的值。队列的长度capacity需要是2的N次方。(capacity-1)是一个各位全是1的整数原创 2020-12-11 15:56:35 · 385 阅读 · 2 评论 -
std::move()的思考
首先看一下这个函数的定义:template <class T>std::remove_reference<T>::type&& move(T && param){ return static_cast<std::remove_reference_t<T>::type&&>(param)}...原创 2020-04-30 12:47:41 · 141 阅读 · 0 评论 -
引用折叠和完美转发
最新学习C++11,发现引用折叠和完美转发的概念非常的不好理解。今天发现了一篇文章,可以把这两个概念讲的特别清楚。from:https://zhuanlan.zhihu.com/p/508164201、引用折叠T& & = T&T& && = T&T&& & = T&T&& &am...原创 2020-04-30 12:07:17 · 184 阅读 · 0 评论 -
函数中返回局部对象,但是没有调用拷贝构造函数?!
class Person{ public: Person() : age(10) { std::cout << "Person construct" << std::endl; } Person(const Person & p) { ...原创 2020-04-29 17:50:45 · 1308 阅读 · 1 评论 -
函数对象
函数对象是指一个类,显式的重载了()运算符。 当该类型的对象使用括号运算符时,表现的像是调用了一个函数。函数对象的好处:#1 可以完成和普通函数相同的功能#2 因为属于一个对象,所以可以保存一些中间状态或者信息。参考: https://blog.csdn.net/BonChoix/article/details/8050627...原创 2020-04-27 15:53:45 · 160 阅读 · 0 评论 -
pthread_mutex_t和std::mutex
简单总结:pthread_mutex_t是支持pthread的系统使用的锁,并且支持比较丰富的操作。std::mutex是C++语言实现的互斥锁,功能非常简单。具有跨平台的功能。如果对互斥锁没有特别的要求,尽量使用std::mutex。...原创 2019-12-06 15:52:37 · 2749 阅读 · 1 评论 -
C++实现快速排序
C++实现快速排序#include <iostream>void sort(int a[], int left, int right){ if (left >= right) { return; } int i = left; int j = right; int key = a[i]; while (...原创 2019-12-06 15:05:12 · 92 阅读 · 0 评论 -
vector中会造成迭代器失效的操作
在使用vector时,迭代器经常被用到。 有一些操作会造成迭代器失效,在此特别记录,避免入坑。首先,先来看一个题目: 在vector中插入0~20,然后从当中删除偶数。#include <vector>#include <iostream>int main(int argc, char * argv[]){ std::vector<int> vec...原创 2019-12-03 20:06:48 · 1030 阅读 · 1 评论 -
vector的resize函数和reserve函数的区别
resize和reserve函数的区别是在面试c++经常遇到的问题。resize(num, val)这个函数的功能是调整vector内存的大小为num。如果vector中的元素原来没有num那么多,则会把元素数量扩展到num个,并且新创建的元素会使用val进行初始化。如果vector的元素比num个数多,则超过的部分元素会被删除掉。resize确保vector中的元素个数数num个。调...原创 2019-12-03 17:48:11 · 354 阅读 · 0 评论 -
emplace_back为什么比push_back快这么多?
push_back:因为push_back要求输入的参数是一个已经存在的对象。 当输入的参数,不是这样的对象时,会调用对应类的构造函数,构造一个临时的对象。然后把这个对象执行拷贝构造函数或者移动构造函数插入到vector中。emplace_backemplace_back可以直接使用参数,在本地构建对象。这样一来,只需要调用构造函数,没有调用拷贝构造函数或者移动构造函数的过程。...原创 2019-12-03 17:37:36 · 1832 阅读 · 0 评论