google benchmark学习与使用

google benchmark

#include <benchmark/benchmark.h>

#include <array>

constexpr int len = 6;

// constexpr function具有inline属性,你应该把它放在头文件中

constexpr auto my_pow(const int i)

{

return i * i;

}

// 使用operator[]读取元素,依次存入1-6的平方

static void bench_array_operator(benchmark::State& state)

{

......

grpc入门教程

周五在家折腾了下grpc,在13年的一个笔记本上编译居然用了8个小时,内存swap用了15G,简直了。

This guide gets you started with gRPC in C++ with a simple working example.

Introduction to gRPC

A basic tutorial introduction to gRPC in C++.

gRPC Crash Course - Modes, Examples, Pros & Cons and more

Linux中踩栈浅析

调试时必需的栈知识

栈(stack)是程序存放数据的内存区域之一,其特征是LIFO(Last In First Out, 后进先出)式数据结构,即后放进的数据最先被取出。向栈中存储数据的操作称为PUSH(压入),从栈中取出数据称为POP(弹出)。在保存动态分配的自动变量时要使用栈。此外在函数调用时,栈还用于传递函数参数,以及用于保存返回地址和返回值。

#include <stdio.h>

#include <ctype.h>

#include <stdlib.h>

#define MAX (1UL << 20)

typedef unsi......

KMP算法简介与应用

延期复工在家无聊,刷了几道leetcode的题,目前进度111 / 1340,很多题目虽能折腾折腾AC,但运行速度和内存占用往往很难达到top 10%。以leetcodeimplement strstr为例,要实现子串查找最简单的就是暴力求解,两层for循环搞起来。当然两层for循环的基础上还能有小的优化。

class Solution {

public:

int strStr(string haystack, string needle) {

int hsize = haystack.size();

int nsize = needle.size();

for(int i = 0;......

LRU算法C++实现

最近项目里需要实现一个LRU算法,github上找到一个c++版本,虽然C++用的少,但看了下源码之后发现学到了不少知识。本文记录如何使用该开源库,最后给出学习之后对源代码的注释版本。

原项目地址:cpp-lru-cache

源代码使用,将如下代码命名为lru_example.cpp,并与文件lrucache.hpp放在同一个目录下。使用如下命令编译:

g++ -g -std=c++11 -o lru_example lru_example.cpp

lru_example.cpp

#include "lrucache.hpp"

#include <......

使用jansson解析JSON

介绍

Jansson是一个对json格式进行编码,解码,操作的c语言库,有以下特点

简单的api设计

文档详尽

无其他依赖库

完全支持UTF-8

大量的测试用例

Jansson是MIT license源码发布方式

Jansson支持多个平台,包括Unix以及windows

编译安装

解压并编译

tar -xvf jansson-2.4.tar.gz

./configure

make

make check

make install

简单使用

只需要包含一个头文件

#include <jansson.h>

直接连接库方式编......

cJSON1.7.11源码学习

由于项目中使用到json,之前使用只是参考别人的使用,未对cJSON源码进行学习,因此本文学习cJSON源码内部实现,记录学习cJSON源码的过程。

JSON相关知识:json介绍

学习的cJSON源码版本为1.7.11.

添加中文注释版本github地址为:cJSON1.7.11中文注释版

准备工作#ifdef __WINDOWS__

/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a pro......

MongoDB C Driver使用完全教程

学习使用MongoDB C Driver需要首先在本机安装mongodb,安装过程参考如下链接:

How to Install and Configure MongoDB on CentOS 7

启动mongodb存在告警信息,解决方法可以参考stackoverflow

升级cmake

由于centos7自带的cmake版本过低,因此需要升级cmake

root@localhost ~]# yum -y install gcc gcc-c++ kernel-devel ##先安装编译软件

[root@localhost ~]# wget https://cmake.or......

webbench源码学习

源代码阅读前的相关知识点总结:

命令行参数

命令行参数解析

命令行参数学习

Linux相关知识

ldd

作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。

示例:查看test程序运行所依赖的库:

/opt/app/todeav1/test$ldd test

libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)

libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)

libgcc_s.so.1 =......

七牛云失效

目前博客的写作方式为Makedown+图床方式,图床的话选择了七牛,前几天突然发现图片无法显示,参考如下链接七牛图片失效,将图床从七牛移动到github。

七牛有一点特别坑的是登录后台在后台无法下载图片,必须使用qrsctl命令行工具。而且我查找了邮箱,发现在域名失效前并未发送邮件通知,这真的是一个非常坑的处理问题的方法。参考上文链接中的方法,可以将图片下载到本地然后再上传到github。

脚本:

#!/bin/bash

#修改52coder为你的存储空间名,并将qrsctl与该脚本放在同一目录

imgs=`./qrsctl listprefix 52coder ''`

i......