C++关键字与保留标识符
C++语言关键字和保留标识符关键字 关键字是组成编程语言词汇表的标识符,不能将他们用于其他用途。下表列出了C++所有关键字及,包括C++11,14,17及20标准对于关键字用途的重新定义。
关键字
标准
描述
alignas
C++11
用于内存对齐相关
alignof
C++11
用于内存对齐相关
asm
C++11
用于在C++代码中直接插入汇编语言代码
auto
C++98,C++11
C++ 98 中,auto 的作用是让变量成为自动变量(拥有自动的生命周期),但是该作用是多余的,变量默认拥有自动的生命周期。在C++11 中,已经删除了该用法,取而代之的作用是:自动推断变量的类型。
bool
C++11
声明布尔类型变量
break
C++98
跳出循环语句
case
C++98
用于switch分支语句
catch
C++11
异常处理,与try一起用于捕获并处理异常
char
C++98
声明字符类型
char16_t
C++11
声明UTF-16字符集表示的字符类型,要求大到足以表示任何 UTF-16 编码单元(1 ...
C++语言标准
C++语言的起源 与C语言一样,C++也是在贝尔实验室诞生的,Bjarne Stroustrup于20世纪80年代在这里开发出了这种语言。用他自己的话来说,“C++主要是为了我的朋友和我不必再使用汇编语言、C语言或者其他现代高级语言来编程而设计的。它的主要功能是可以更方便地编写出好程序,让每个程序员更加快乐”。
C++语言标准 美国国家标准委员会(ANSI)在1990年成立委员会,后来国际化标准组织ISO也通过其委员会加入这个行列。他们组成ANSI/ISO组织,专门致力于制定C++标准。
现已发布和计划中的标准如下:
C++98/C++03标准 1998年制定出的第一个C++标准ISO/IEC 14882:1998。通常被称为C++98,它不仅描述了已有的C++特性,还对该语言进行了扩展,添加了异常、运行阶段识别符(RTTI)、模板和标准模板库(STL)。2003年,发布了第二个C++标准ISO/IEC 14882:2003。这个版本的是一次技术性修正,对第一版进行了整理、修订错误、减少多义性等,但是没有 ...
gem5运行SPECCPU2017benchmark
系统环境配置 硬件:
CPU: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz 4核 8 线程
内存16G
硬盘 2T HDD+512G SSD
软件:
Ubuntu 18.04 LTS
GCC/G++/FORTRAN 7.5.0
python 3.7.6
gem5 20.1.0.0
SPEC CPU2017 benchmark
spec cpu2017 由43个benchmark组成,由20个整型和23个浮点benchmark组成。整型和浮点又分别有 吞吐量(Rate)和速度(Speed)两种类别的bench,分别用于测试 CPU的速度和吞吐量。将43个bench分为整型吞吐量(int_rate)、整型速度(int_speed)、浮点吞吐量(fp_rate)、浮点速度(fp_speed)四个类别。下面是对43个bench的具体介绍:
SPECrate 2017 Integer
SPECspeed 2017 Integer
Language
KLOC[1]
应用领域
500.p ...
C++多继承时的虚函数表结构
C++为了实现运行时的多态,引入了虚函数的概念。为了实现运行时多态的,其底层一般采用虚函数表来实现对虚函数的动态绑定,进而在基类对象的引用或指针在调用同名的虚函数时可以根据引用或指针指向对象的实际类型调用相应的函数。当类的继承关系中没有使用多继承时,对象的虚函数表结构还相对简单;然而继承中出现多集成时,问题就变得复杂起来了。
有如下的一个例子:
class A{public: A(int a=0):a(a){} virtual void fun1() { cout << "A::fun1()" <<endl; }private: int a;};class Base1: public A{public : Base1(int b1=1):A(0),b1(b1) {} virtual void func1() { cout<<" ...
gem5获取bench的访问内存信息
简介 获取gem5的bench的内存访问信息的主要原理来自于gem5提供的调试(debugging)支持.
gem5提供了的调试标志(debug flags)来输出运行仿真的运行时信息。gem5提供了从内存系统到CPU的全系统仿真能力,提供了许多相关的gebug flags 以使我们可以更好的跟踪我们的仿真。
gem5 default debug flags gem5提供了许多以实现的debug flags.可以使用如下命令查看,我的环境(gem5 20.0.0.0 ubuntu 18.04 LTS)
build/X86/gem5.opt --debug-help
输出如下:
build/X86/gem5.opt --debug-helpBase Flags: Activity: None AddrRanges: None Annotate: State machine annotation debugging AnnotateQ: State machine annotation queue debugging ...
gem5运行SPECCPU2006benchmark
gem5运行SPECCPU 2006benchmark前言 最近在做实验,准备在GEM5中运行SPECCPU 2006的benchmark。
系统环境配置 硬件: CPU I5-4500 4核 内存8G 硬盘 1T 软件: Ubuntu 18.04 LTS GCC/G++5.5 python2.7 gem5 20.0.0.3
编译安装 GEM5基本安装运行
SPEC CPU 2006 benchmark基本安装运行
SPEC runspec命令该命令是用来编译和运行spec cpu 2006的。
协同仿真目前已编译成功并运行的benchmark
int benchmark
language
success(true or false)
400.perlbench
C
true
401.bzip2
C
true
403.gcc
C
true
429.mcf
C
true
445.gobmk
C
true
456.hmmer
C
true
458.sjeng
C
true
4 ...
值得推荐的C与C++框架和库
值得推荐的C/C++框架和库转载:EZLippi-值得推荐的C/C++框架和库
值得学习的C语言开源项目Libeventlibev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。
下载链接:https://github.com/libevent/libevent
MemcachedMemcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。下载地址:http://memcached.org/
RedisRedis 是一个使用 C 语言写成的,开源的 key-value 数据库。Redis ...
C语言标准
C语言标准发展C语言的起源 1972年,贝尔实验室的丹尼斯.里奇(Dennis Ritch)和肯.汤普逊(Ken Thompson)在开发UNIX操作系统时设计了C语言。然而C语言并不完全是里奇突发奇想而来,他是在B语言(汤普逊发明)的基础上进行设计。C语言设计的初衷是将其作为程序员使用的一种编程工具,因此,其主要目标是成为有用的语言。
C语言标准 目前,有许多C实现可用。在理想情况下,编写C程序时,假设该程序中未使用机器特定的编程技术,那么它的运行情况在任何实现中都应该相同。要在实践中做到这一点,不同的实现要遵循一个标准。
C语言发展之初,并没有所谓的C标准。1987年,布莱恩.柯林汉(Brian Kernighan)和丹尼斯.里奇(Dennis Ritch)和著的The Programming Language(C语言程序设计)第一版是公认的C标准,通常称之为K&R C或经典C。特别是,该书中的附录中的"C语言参考手册"已成为C的指导标准。虽然这本书的附录定义了C语言,但是并没有定义C库。与大多数语言不同的是,C语言比其他 ...
C与C++的区别
C和C++的区别 参考:C Primer plus 6th
在很大程度上,C++是C的超集,这意味着一个有效的C程序也是一个有效的C++程序。C和C++的主要区别是,C++支持许多附加特性。但是,C++中许多规则与C稍有不同。这些不同使得C程序作为C++程序编译时可能以不同的方式运行或者根本不能运行。 C99标准的发布使得问题更加复杂,因为有些情况使得C更接近C++。例如,C99标准允许在代码中的任意处进行声明,而且可以识别//注释指示符。在其他方面,C99使得其与C++的差异变大。例如,新增了变长数组和关键字restrict。C11缩小了与C++的差异。例如,引进了char16_t类型,新增了关键字_Alignas,新增了alignas宏与C++的关键字匹配。C11仍处于起步阶段,许多编译器开发商甚至都没有完全支持C99。要了解它们之间的区别,需要了解C90,C99,C11之间的区别,还要了解C++11与这些标准之间的区别,以及每个标准与C标准之间的区别。下面主要讨论C99,C11和C++之间的区别。由于C++也在发展,因此,C与C ...
C11关键字_Static_assert
C11新增关键字_Static_assert C11标准新增了一个关键字_Static_assert,下面来介绍一下它的相关用法和注意事项。
用法 和C11以前的断言assert()表达式有些类似。assert()表达式是在运行时检查。而C11新增的_Static_assert声明可以在编译时检查assert()表达式。因此,assert()可以导致正在运行的函数中止,而_Static_assert()可以在导致程序无法通过编译。_Static_assert()接受两个参数。第一个参数是一个整型常量表达式,第二个参数是一个字符串。如果第一个表达式求值为0(或_False),编译会显示字符串,而且不编译该程序。
例程下面是一个使用_Static_assert的例程:
#include <stdio.h>#include <limits.h>_Static_assert(CHAR_BIT == 16, "16-bit char falsely assumed");int main(void){ puts(&qu ...