总结:不同编译器下——数据类型的长度变化情况

通常,在运用不同程序语言编写程序代码过程中,我们也许都将遇到数据类型长度确认的问题,有时也关系着程序结构或者算法思路解析的过程,稍有记忆模糊或者记忆出错都将导致代码调试与程序编译出错。因此,熟悉掌握与分辨出不同编译器下不同数据类型的实际长度十分重要。下面便是进一步说明。
对于数据类型长度的掌握需分清两个方面的内容:
一、程序编译器识别
这里指的是代码源程序实际在运行过程中所用到的编译器,数据类型的实际长度由编译器在编译期间决定。因为在不同的平台下不同数据类型被分配的字节数是不同的,主要包括三个方面的含义,涉及:CPU、OS和Complier。
CPU,即中央处理器,主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。它与内部存储器(Memory)和输入/输出(I/O)设备合称为电子计算机三大核心部件。它包括包括运算逻辑部件、寄存器部件和控制部件等。主要实现处理指令、执行操作、控制时间、处理数据等功能,对数据长度的变化没有影响。
OS,即操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。目前使用最多的是32位和64位的OS,但不同OS中也可装载不同的编译器(如64位OS中也可以装32位的OS或者编译器),因此,OS对数据类型的长度没有直接的影响。
Complier,即编译器,是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。工作流程为:现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。在编译过程中就会涉及到数据类型长度分配的问题。因此,16位、32位、64位编译器会使得数据类型的长度发生改变。

二、不同编译器下的数据类型长度

32位编译器:(Visual Studio C++)
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 4
sizeof(long) = 4
sizeof(long long) = 8
sizeof(void *) = 4 (表示指针类型数据长度)

64位编译器:
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 4
sizeof(long) = 8
sizeof(long long) = 8
sizeof(void *) = 8

16位编译器:(Turbo C/Turbo C++)
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 2
sizeof(long) = 4
sizeof(long double) = 16
sizeof(void *) = 4

你可能感兴趣的:(程序语言基础)