![](https://img-blog.csdnimg.cn/20190828164942965.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++与编程语言
文章平均质量分 91
主要介绍C++编程语言特性及其各种用法
smilejiasmile
这个作者很懒,什么都没留下…
展开
-
理解 C++ 的 Memory Order 以及 atomic 与并发程序的关系
为什么需要 Memory Order 如果不使用任何同步机制(例如 mutex 或 atomic),在多线程中读写同一个变量,那么,程序的结果是难以预料的。简单来说,编译器以及 CPU 的一些行为,会影响到程序的执行结果:即使是简单的语句,C++ 也不保证是原子操作。 CPU 可能会调整指令的执行顺序。 在 CPU cache 的影响下,一个 CPU 执行了某个指令,不会立即被其它 CPU 看见。 原子操作说的是,一个操作的状态要么就是未执行,要么就是已完成,不会看见中间状态。例如,在 C原创 2022-01-27 17:36:51 · 1134 阅读 · 0 评论 -
C/C++ 中嵌入汇编总结
GCC汇编语法梗概AT&T 与 Intel 汇编区别Linux GCC(GNU, C Compiler)使用AT&T汇编语法。下面列一下AT&T 和Intel汇编语法中的不同:源-目的 顺序AT&T中源和目的操作数的顺序相反。Intel语法中第一个操作数是目的,第二个是源。而AT&T语法中,第一个是源第二个操作数是目的。“Op-code src, dst” —— AT&T 语法“Op-code dst, src” —— Intel语法寄转载 2021-08-02 10:00:26 · 1086 阅读 · 0 评论 -
cmake 常用变量和常用环境变量
一,cmake 变量引用的方式:前面我们已经提到了,使用${}进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过${}取值二,cmake 自定义变量的方式:主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义<projectname>_BINARY_DIR 和<projectname>_SOURCE_DIR 两个变量。显式定义的例子我们前面也提到了,使用 SET 指令,就可以构建一个自定义变量了。比如原创 2021-07-16 15:18:04 · 6511 阅读 · 0 评论 -
【程序性能分析利器】Google Perf Tool 和 Valgrind 工具包简介
Google Perf Tools 的安装和使用Gperf 工具包包含如下几个工具: 一个优化的内存管理算法—tcmalloc性能优于malloc。 一个用于CPU profile的工具,用于检测程序的性能热点,这个功能和gprof类似。 一个用于堆检查工具,用于检测程序在是够有内存泄露,这个功能和valgrind类似。 一个用于Heap profile的工具,用于监控程序在执行过程的内存使用情况。 其使用方法如下:1.使用其提供的内存管理函数---TC Malloc: .原创 2021-05-11 11:12:01 · 2691 阅读 · 1 评论 -
autotools 自动编译系列简介
autotools安装1.介绍Linux环境下,我们编译程序啥的都是一般用的GCC&&GDB等等工具,直接使用GCC命令进行编译操作。这种方式一般是适用于程序文件比较少,组织结构比较简单的情况。但是,当我们程序文件比较的多的时候,或者是程序文件组织结构比较的复杂(例如在程序文件夹中存在文件夹多层嵌套以及复杂引用等),此时我们如果是直接使用GCC一点一点的编译工作量会非常的大,而且万一程序修改了,还要重新的再工作一遍。为此,我们有了make工具,依靠Makefile辅助文件,我.转载 2021-04-04 00:11:19 · 932 阅读 · 1 评论 -
CMake 常用命令和变量
前言前面的文章介绍了一个最简单的CMake工程,这篇文章将介绍一个稍微复杂一些的CMake工程,结合这个工程总结一下在组织一个C/C++工程时最为常用的一些CMake命令和变量。对于涉及到的命令和变量,介绍的原则是点到即止,先仅需掌握基本用法即可,让工程跑起来。上一篇文章中那个最简单的CMake Hello World工程,在其CMake脚本文件CMakeLists.txt中,仅有一句话:add_executable(hello hello.cpp)这里面的add_executable就是转载 2021-03-30 15:41:48 · 267 阅读 · 0 评论 -
Boost asio 官方教程简介
1. 概述本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心。 名字本身就说明了一切:Asio 意即异步输入/输出。 该库可以让 C++ 异步地处理数据,且平台独立。 异步数据处理就是指,任务触发后不需要等待它们完成。 相反,Boost.Asio 会在任务完成时触发一个应用。 异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。异步任务的典型例子是网络应用。 如果数据被发送出去了,比如发送至 Internet,通常需要知道数据是否发送成功。 如果没...原创 2021-03-03 19:39:55 · 6169 阅读 · 1 评论 -
无锁(Lock-Free)编程简介及漫谈
一、引言现代计算机,即使很小的智能机亦或者平板电脑,都是一个多核(多CPU)处理设备,如何充分利用多核CPU资源,以达到单机性能的极大化成为我们码农进行软件开发的痛点和难点。在多核服务器中,采用多进程或多线程来并行处理任务,俨然成为了大家性能调优的标准解决方案。多进程(多线程)的并行编程方式,必然要面对共享数据的访问问题,如何并发、高效、安全地访问共享数据资源,成为并行编程的一个重点和难点。传统的共享数据访问方式是采用同步原语(临界区、锁、条件变量等)来达到共享数据的安全访问,然而,同步恰恰和并行原创 2021-02-27 21:28:45 · 4472 阅读 · 1 评论 -
C++ 预处理与宏相关编程(#,##等等)
一、简介引言C++模板元编程(template metaprogramming)虽然功能强大,但也有局限性:不能通过 模板展开 生成新的标识符(identifier)。例如:生成新的 函数名、类名、名字空间名 等 使用者 只能使用 预先定义的标识符,不能通过 模板参数 获取符号/标记(token)的字面量(literal) 例如 在反射中获取 实参参数名的字面量,在断言中获取 表达式的字面量。所以,在需要直接操作标识符的情况下,还需要借助宏,进行预处理阶段的元编程:...原创 2021-02-09 16:15:39 · 858 阅读 · 0 评论 -
pthread_attr_init线程属性
1.线程属性线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。1. 名称:: pthread_attr_init/pthread_attr_destroy 功能: 对线程属性初始化/去除初始化 头文件: #i转载 2021-01-19 10:27:56 · 228 阅读 · 0 评论 -
C++ 之编程语法习惯之 do{...}while(0) 的用处
在学习第一门编程语言时,就已经介绍了顺序分支、条件分支、循环分支。比如循环分支有for、while、do-while语句。在随后的学校及工作中,如果手工循环一般使用for、while,很少使用do-while,感觉用处不大,但现在看来,do-while大有用途。1. 帮助定义复杂的宏以避免错误举例来说,假设你需要定义这样一个宏:#define DOSOMETHING() foo1(); foo2();这个宏的本意是,当调用DOSOMETHING()时,函数foo1()和foo2()都会被原创 2021-01-06 23:25:29 · 548 阅读 · 0 评论 -
Reactor和Proactor对比以及优缺点 (netty的底层原理reactor模型)
IO设计模式:Reactor和Proactor对比时接触的开源产品如Redis、ACE,事件模型都使用的Reactor模式;而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也少;这里学习下其模型结构,重点对比下两者的异同点;反应器ReactorReactor模式结构Reactor包含如下角色:Handle 句柄;用来标识socket连接或是打开文件;S...转载 2018-10-17 17:14:23 · 1899 阅读 · 0 评论 -
Linux中error while loading shared libraries错误解决办法
Linux中error while loading shared libraries错误解决办法 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库...转载 2018-11-20 18:17:12 · 21508 阅读 · 3 评论 -
C++11新特性之十:enable_shared_from_this
enable_shared_from_this是一个模板类,定义于头文件<memory>,其原型为: template< class T > class enable_shared_from_this; std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 ...转载 2018-11-10 00:27:34 · 212 阅读 · 0 评论 -
c++ 带参数的宏定义实现反射机制
lua 这种脚本语言用久了,总觉得反射机制就应该理所当然的嵌入在语言特性里。比如希望根据自己传的类名变量,动态去 new 一些实例。在 lua ,js 里做起来就非常简单,然而在 c++里面做起来,就需要稍微费些周折。好在 c++ 宏定义 支持传入参数, 仿佛就是专门给反射机制设计的。写的时候参考 cocos2dx CREATE_FUNC 这个宏#define CREATE_FUNC(__...转载 2018-10-10 13:19:01 · 1107 阅读 · 0 评论 -
boost一些常用库(数据结构,迭代器,算法及字符串) 简单介绍
原文地址:http://blog.csdn.net/jinzhuojun/article/details/51923337 C++强大的重要原因之一就是它的库。而boost就是这样一个包罗万象的C++库,同时它也是C++标准库的官方后备军。不仅实用,功能全,而且灵活,高效,质量高。无论是学习或项目,都是有力的工具。下面罗列了容器、算法等几个重要类别下的主要子库。其中的一些已经是目前比较主流...转载 2018-09-27 00:20:37 · 1983 阅读 · 0 评论 -
extern 在c/c++ 中的作用
本文转载自http://blog.csdn.net/big_bit/article/details/51595714 感谢博主分享的相关的语法知识解析一.extern修饰变量和函数在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。extern声明不是定义,即不分配存储空间。先来看一段代码[cpp] view plain c...转载 2018-03-04 00:22:40 · 1993 阅读 · 0 评论 -
Windows 平台下的C++代理类(供C # 使用)
转自 : http://blog.csdn.net/starlee/article/details/2864588现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额。因此很多以前搞VC++开发的人都转向用更强大的VS.Net。在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类的问题。下面就用一个完整的实例来详细说明怎样用托管C++封装一个转载 2018-01-10 17:52:37 · 561 阅读 · 2 评论 -
C++学习笔记系列二
1、C++程序内存分配方式 栈区(stack):由编译器自动分配释放,堆区(heap):一般由程序员分配释放,不会随着函数栈的销毁而销毁,有程序员释放,或程序执行完成,有OS回收、全局/静态区( static):全局变量和静态变量的存储,文字常量区:存放常量字符串 5)、程序代码区:存放函数体(类的成员函数、全局函数)的二进制代码栈区是原创 2017-08-28 13:27:47 · 267 阅读 · 0 评论 -
单例设计模式
---->单例设计模式 --->可以将singleton 改成相应的名字。主要作用:是可以用来替换全局变量。全局唯一的。使用场景:配置文件的读取、词典类的实现,日至系统的输出对象自己的理解://单例设计模式,用来替代全局变量,并且该内存中只应有一个对象//分析:只能有一个对象,首先在类之外肯定不定义其他对象,故这个唯一的一个对象,必定在类之内去定义好,类之外只要访问原创 2017-08-28 13:29:53 · 215 阅读 · 0 评论 -
C++学习笔记系列三
1、new/delete扩展使用new表达式时发生的三个步骤: 调用名为operator new的标准库函数,分配足够大的原始的未类型化的内存,以保存指定类型的一个对象运行该类型的一个构造函数去初始化对象返回指向新分配并构造的构造函数对象的指针 使用delete表达式时,发生的步骤:调用对象的析构函数调用名为operator dele原创 2017-08-28 13:31:18 · 452 阅读 · 0 评论 -
日志单例log4cpp简述
1、log4test.cpp自动对齐 gg=G 编译使用log4cpp库的CPP文件时,要加上库文件,如下示例 g++ log4test.cpp -llog4cpp -lpthreadlog4cpp学习log4app使用单例模式。Appender可以定位日志输出信息 ,如console,或保存到文件中Category可以有不同的输出种类,Ro原创 2017-08-28 13:32:49 · 1668 阅读 · 0 评论 -
C++学习笔记系列四
1、一般来说,类的私有成员只能在类的内部访问,类外的函数是不能访问它们的。 但是,可以将一个函数定义为类的友元函数,这时该函数就可以访问该类的私有成员了。友元之普通函数(非成员函数,自由函数)友元之成员函数,,用到类的前向声明---->声明的是一个不完全的类。友元之类。friend Line 或friend class Line友元关系是单向的关系。不能传递,是不可继承的。只有两个有强相原创 2017-08-28 13:33:38 · 249 阅读 · 0 评论 -
解析XML文件
HTML ---> RSS源码,要求解析XML文件,它有是RSS格式的,建议使用tinyXml2解析RSS文件,故要学习tinyXml2,它在github上面。解析 XML 文件,解析 json 数据,是必备技能。在解析xml 文件时,要求提取出标题、链接、content、并且删除文章中的标记语言 ----> 这就需要字符串匹配和处理,(一般的自己写的字符串处理太繁琐,故要求利用正则表达式进原创 2017-08-28 13:34:34 · 382 阅读 · 0 评论 -
c++模板概述
一、模板简介模板引入一种全新的编程思维方式,称为“泛型编程强类型程序设计中,参与运算的所有对象的类型在编译时即确定下来,并且编译程序将进行严格的类型检查。为了解决强类型的严格性和灵活性的冲突。强类型(静态)程序设计语言: C C++ Java C#弱类型 ----->Javascript PHP lua python 弱类型(动态)程序设计语言原创 2017-08-28 13:35:24 · 441 阅读 · 0 评论 -
C++空间分配器简述学习笔记
空间分配器 std:: allocator std::allocator提供的接口 ---> 位于头文件 对象的定义和空间的分配是分开的。templateclass allocator{ typedef Alloc _alloc 实现层 public: //用来申请空间,分配新的空间原创 2017-08-28 13:37:22 · 415 阅读 · 1 评论 -
C++学习笔记系列之继承多态
一、移动语义1、右值引用 有一种机制,可以在语法层面识别出临时对象,在使用临时对象构造新对象(拷贝构造)的时候,将临时对象所持有的资源『转移』到新的对象中,就能消除这种不必要的拷贝。2、左值和右值 左值和右值都是针对表达式而言的, 左值是指表达式结束后依然存在的持久对象 右值是指表达式结束时就不再存在的临时对象区分: 能...原创 2017-08-28 13:38:17 · 873 阅读 · 1 评论 -
设计模式及相关
一、TextQuery的类图 二、设计模式1、分类创建型设计模式:主要用于描述如何创建对象 5种。主要掌握单例模式工厂模式抽象模式结构型设计模式:主要用于描述如何实现类和对象的组合 7种。适配器组转载 2017-08-28 13:39:48 · 278 阅读 · 0 评论 -
lambda表达式相关
转载自: http://www.jb51.net/article/56147.htm 今天就直接点儿,从代码撸起走,,复制代码代码如下:#include<iostream>using namespace std; int main(){ int a = 1; int b = 2; auto func = [=, &b](...转载 2017-10-28 19:02:38 · 260 阅读 · 0 评论 -
vs 高效开发
有过Java开发经验的人都知道Java的常用开发工具(如Eclipse、Intellij IDEA等)都有非常强大的关键字高亮、智能提示、快速追踪等的功能。那也许你就要问了:进行C++开发的Visual Studio是否也有这个功能呢?首先要说明的是Visual Studio本身并没有这么强大的功能(至少VS2010及之前版本是这样的,有一些简单的代码跟踪能力但是很难用),但它有一个非常强大和好用转载 2017-12-20 17:59:08 · 883 阅读 · 0 评论 -
利用C++实现自定义插件
利用C++实现自定义插件插件机制能够方便地扩展已有应用程序的功能。用C++实现插件机制的基本思路是:应用程序提供接口,由用户或第三方实现这些接口,并编译出相应的动态链接库(即插件);将所有插件放到某个特定目录,应用程序运行时会自动搜索该目录,并动态加载目录中的插件。应用程序提供接口为了实现功能扩展,应用程序必须向插件提供接口。在base.h中定义一个抽象类Base作为接口:转载 2018-01-23 17:31:39 · 1773 阅读 · 0 评论 -
C++插件浅谈之二
一、插件架构初步介绍 想到写本博客,也没想到更好的名字,目前就先命这个名吧。说到插件架构,或许大部分IT从业者都听过或者某些牛人也自己实现过稳定高效的插件框架。目前有很多软件以及库都是基于插件架构,例如PS、我所在行业的GIS软件如Arcgis、QGIS、还比如开源图形引擎OGRE以及OSG,这些都是插件架构,通过插件架构来进行功能的扩展。那到底什么是插件架构呢?我的理解是系统运行时转载 2018-01-23 17:38:00 · 734 阅读 · 0 评论 -
C++学习笔记系列一
1、 cout就是一个对象。故它可以调用 定义在名称空间中的变量或者函数都称为实体:: 是作用域限定符 ( std:: cout 在命名空间之后,可以加上提示语句,//end of namespace A;对于命名空间,除了::,外还可以使用using 命名机制,尽可能将其范围缩小。using 编译指令,(using namespace std ; 实体全部引进原创 2017-08-19 19:06:35 · 225 阅读 · 0 评论