C/C++相关知识点随记(持续更新)

2024-06-17 12:18

本文主要是介绍C/C++相关知识点随记(持续更新),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

个人在C/C++程序中的一些语法小结

一.一些比较习惯的用法

1.C++编程中,如下情况,表示对无符号数0按位取反后右移一位,若在在32系统中,就是将来32位的0取反后右移一位的值赋给inf

 

const int inf = ~0u>>1

 

详细说明:

~ 逐位求反

u 后辍为 定义unsigned类型

>>右移

2.如下表示无符号长整数常量1,用16进制表示

0x1ul

后缀u代表无符号数

后缀l代表长型数

这三个标记都不区分大小写

 

 

二.关于指令集

 

#include <immintrin.h>  //immintrin.h     Intel-specific intrinsics(AVX)

引入因特尔指令集

 

Intrinsics头文件与SIMD指令集、Visual Studio版本对应表(转)

File:Intrinsics头文件

描述:指令集描述
VS:Visual Studio版本号
VisualStudio:Visual Studio版本名

 

File描述VSVisualStudio
intrin.hAll Architectures8.02005
mmintrin.hMMX intrinsics6.06.0 SP5+PP5
xmmintrin.hStreaming SIMD Extensions intrinsics6.06.0 SP5+PP5
emmintrin.hWillamette New Instruction intrinsics (SSE2)6.06.0 SP5+PP5
pmmintrin.hSSE3 intrinsics9.02008
tmmintrin.hSSE3 intrinsics9.02008
smmintrin.hSSE4.1 intrinsics9.02008
nmmintrin.hSSE4.2 intrinsics.9.02008
wmmintrin.hAES and PCLMULQDQ intrinsics.10.02010
immintrin.hIntel-specific intrinsics(AVX)10.02010 SP1
ammintrin.hAMD-specific intrinsics (FMA4, LWP, XOP)10.02010 SP1
mm3dnow.hAMD 3DNow! intrinsics6.06.0 SP5+PP5

 

armintr.h:ARM的常用指令集。
arm_neon.h:ARM的neon指令集。

 

intrin.h中以前大段的ARM Intrinsics被移到armintr.h中去了,现在的intrin.h只需引入armintr.h(拥有_M_ARM宏时)。

但是intrin.h并没有引入arm_neon.h。搜索了一下其他头文件,也没有引入arm_neon.h。看来不会自动引入,需要开发者根据情况手动引入arm_neon.h。

又对比了一下原来就有Intrinsics头文件,发现两个文件增加了新的Intrinsics函数集——
immintrin.h:F16C、RDRAND、FSGSBASE、FMA、AVX2、BMI1、BMI2、LZCNT、INVPCID、HLE、RTM。
ammintrin.h:BMI1、TBM。

指令简介——
F16C、RDRAND、FSGSBASE:这些是Ivy Bridge架构的新指令。
FMA、AVX2、BMI1、BMI2、INVPCID、HLE、RTM:这些是Haswell架构的新指令。
LZCNT:AMD的ABM指令集,现在Intel对其支持。以前intrin.h有一个双下划线版的,现在immintrin.h提供单下划线版。
TBM:AMD的TBM指令集。

Haswell架构在2013年第二季度才发售,VC2012已提前做好准备。

SSE是指令集的简称,它包括70条指令,其中包含单指令多数据浮点计算、以及额外的SIMD整数和高速缓存控制指令。其优势包括:更高分辨率的图像浏览和处理、高质量音频、MPEG2视频、同时MPEG2加解密;语音识别占用更少CPU资源;更高精度和更快响应速度。SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是MMX的超集。AMD后来在Athlon XP中加入了对这个指令集的支持。这个指令集增加了对8个128位寄存器XMM0-XMM7的支持,每个寄存器可以存储4个单精度浮点数。使用这些寄存器的程序必须使用FXSAVE和FXRSTR指令来保持和恢复状态。但是在Pentium III对SSE的实现中,浮点数寄存器又一次被新的指令集占用了,但是这一次切换运算模式不是必要的了,只是SSE和浮点数指令不能同时进入CPU的处理线而已。

AVX指令集是Sandy Bridge和Larrabee架构下的新指令集。AVX是在之前的128bit扩展到和256bit的SIMD(Single Instruction, Multiple Data)。而Sandy Bridge的SIMD演算单元扩展到256bits的同时数据传输也获得了提升,所以从理论上看CPU内核浮点运算性能提升到了2倍。

 

 

 

这篇关于C/C++相关知识点随记(持续更新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069417

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据