随笔分类 - c++
摘要:使用boost/multiprecision/cpp_dec_float.hpp #include <boost/multiprecision/cpp_dec_float.hpp> using boost::multiprecision::number; using boost::multiprec
阅读全文
摘要:通过stringstream类来进行int 和string 的转换。stringstream的头文件是sstream使用stringstream对象简化类型转换 stringstream 我发现重复写入时会出现前面的东西还留在stream中。这时,我首先想到的是clear()函数,这个函数是用来清空
阅读全文
摘要:thread_local 是 C++ 11 新引入的一种存储类型,它会影响变量的存储周期。 C++ 中有 4 种存储周期: automatic static dynamic thread 有且只有 thread_local 关键字修饰的变量具有线程(thread)周期,这些变量在线程开始的时候被生成
阅读全文
摘要:1、原因: GCC 5在编译时会将std::string类型按c++11下std::__cxx11::basic_string<char> 来处理,这时如果你调用的库在编译时未启用c++11特性则其中的std::string实际上是std::basic_string<char> ,如果将c++11下
阅读全文
摘要:参照:http://blog.csdn.net/xiaohuangcat/article/details/18267561 在多线程的环境下,进程内的所有线程共享进程的数据空间。因此全局变量为所有线程共享。在程序设计中有时需要保存线程自己的全局变量,这种特殊的变量仅在线程内部有效。 如常见的errn
阅读全文
摘要:格式: _asm_("asm statements":outputs:inputs:registers-modified) 其中,"asm statements"是汇编语句表达式,outputs,inputs,register-modified都是可选参数,以冒号隔开,且一次以0~9编号,如outp
阅读全文
摘要:C++另外有一种匿名的命名空间,来保证生成的符号是局部的,这样对于匿名空间中的变量等,外部都是不可见的. //test3.cpp static void bar(){} namespace //匿名的命名空间 { float bar2; int foo; } //test4.cpp extern i
阅读全文
摘要:工作中遇到这样一个问题,某个多级流水多线程的程序,在压力测试下会偶现segmentation fault11错误,错误出现在运行类函数的地方,而后排查后发现是由于多线程争抢导致类被析构后才走入判断,导致出现内存越界。 代码流程如上: 1、多级流水:Task1->Task2->Task3,且每个Tas
阅读全文
摘要:字节序(byte order)关系到多字节整数(short/int16、int/int32,int64)和浮点数的各字节在内存中的存放顺序。字节序分为两种:小端字节序(little endian)和大端字节序(big endian)。小端字节序:低字节存放在内存低地址,例如对两字节整数0x0100(
阅读全文
摘要:O_DIRECT和O_SYNC是系统调用open的flag参数。通过指定open的flag参数,以特定的文件描述符打开某一文件。 这两个flag会对写盘的性能有很大的影响,因此对这两个flag做一些详细的了解。 先看一个open函数的使用例子. O_DIRECT: 无缓冲的输入、输出。 O_SYNC
阅读全文
摘要:一. 原理 tcmalloc就是一个内存分配器,管理堆内存,主要影响malloc和free,用于降低频繁分配、释放内存造成的性能损耗,并且有效地控制内存碎片。glibc中的内存分配器是ptmalloc2,tcmalloc号称要比它快。一次malloc和free操作,ptmalloc需要300ns,而
阅读全文
摘要:转载于:http://www.cnhalo.net/2016/06/13/memory-optimize/ 概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升。比如nginx, 它在每个连接accept后会ma
阅读全文
摘要:1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a
阅读全文
摘要:std::thread不提供获取当前线程的系统id的方法,仅可以获取当前的线程id,但是我们可以通过建立索引表的方式来实现 而后用其创建线程 然后用如下方式获取线程id 转自:https://stackoverflow.com/questions/15708983/how-can-you-get-t
阅读全文
摘要:查看ace代码时发现如下代码 使用NDEBUG可以使assert失效,这在c中同样成立。 而static_cast<void>(0)的作用为避免编译器弹出warning提醒,这是因为如果这里直接写0的话,则当编译时,由于该处没有执行代码,编译器会弹出:"Warning: expression 0;
阅读全文
摘要:作者:神奇先生链接:https://www.zhihu.com/question/57048704/answer/151446405来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 编程时经常会写的一种函数叫做named constructor,这种函数的返回值是某个类
阅读全文
摘要:形参为unique_ptr u2,而后实参为std::move(unique_ptr u1),这样会将原本u1的内存传递给u2,避免了传递拷贝。例如:
阅读全文
摘要:从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结。下面的操作以C++为编程语言,protoc的版本为libprotoc 3.2.0。 一、Protobuf? 1. 是什么? Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平
阅读全文
摘要:std::move的定义如下: 通过引用折叠,此参数可以与任何类型的实参匹配,既可以传递给move一个左值引用也可以传右值引用,如: string s1("hi"), s2; s2 = std::move(string("bye1!"));//正确,从一个右值移动数据 s2 = std::move(
阅读全文
摘要:当传入对象时,函数有时会需要拷贝该对象并存入容器中,例如: 类定义: 函数定义: 然而此时,add_item并不知道要分配的类型。当add_item进行内存分配时,它将拷贝sale参数,如 然而这条表达式却可能是不正确的:new为我们请求的类型分配内存,因此它将分配一个Quote类型的对象并拷贝sa
阅读全文