c++重定义变量类型:这种做法主要是用来进行跨平台适配。不同运行环境下面,例如32位,64位系统,某些例如int、long、size_t等类型说明符虽然一样,但是实际占用的位宽却是完全不一样的。
数据的位宽决定了某个变量数据量的承载范围。数据量的承载范围在算法工程中是非常重要的事情,它决定了处理数据的容量范围,决定了硬盘数据和内存数据的存储方式。
如果切换平台产生了实际数据位宽和设计数据位宽不一致,算法程序是无法正常运行的,实际中可能随时会出现诡异的崩溃问题。如果设计之初不重视这个问题的话,后续复查崩溃问题的原因事件非常痛苦的事情。切记,和内存相关的崩溃问题,都是算法领域里面首先需要避免的问题。
正确的解决方案:
所以,我们研发算法工程之前,需要花费一定的工作量,将可能需要的所有常用类型进行重定义。
—–重定义类型的名称需要明确无歧义
—–重定义类型对应的实际类型是唯一性的,不随平台而变动
示例: typedef signed char int8; typedef unsigned char uint8; typedef signed short int16; typedef unsigned short uint16; typedef signed int int32; typedef unsigned int uint32; //typedef signed long long int64; //typedef unsigned long long uint64; typedef uint64_t uint64; typedef int64_t int64;
注意:各个平台对于64位的强定义(longlong类型)的标准不是很统一,不同的编译器的支持也是不一样。c++的标准类型说明头已经做到跨平台兼容。
所以,提前做好类型的定义,可以确保后续平台迁移的时候,设计的内存和实际的内存保持一致,这样内存位宽方面基本不会出现问题了。后续的研发过程中如果出现了更多需要自定义的类型,可以按照同样的道理进行重定义。
这样做的还有个好处是定义个使用进行分开设计,假如后续需要对某个算法的位宽进行改动,实际上只需要对某个自定义类型的说明符的定义进行更改,而不需要对实际的业务代码进行修改。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/608051.html