1. linux下有没有约定俗成的关于32位整形、64位整形的宏定义
没有这类约定俗成的宏定义,因为Linux运行在很多不同的处理器以及平台上,这包括八位、十六位、三十二位、六十四位的嵌入式等平台,而理所当然地也要迎合不同平台的硬件指令集情况,在这种情况下,自然不可能有约定俗成的宏定义,正如楼上所说的,Linux更注重可移植性,所以这些东西,还是根据自己的需求来定义吧
2. C语言程序设计中如何输出一个64位的整数
1、ANSI C99标准中并没有64位整数类型。但是,许多实际的编译器,都实现了对64位整数类型的支持。因为没有这方面的标准,所以具体的语法描述方式略有不同,一般Windows平台,用__int64的关键字,而Linux平台则使用long long的描述方法。
2、有人做了测试,如下图所示:
综合上图可以得出如下几点:
a:long long定义方式可以用于gcc/g++,不受平台限制,但不能用于VC6.0。
b:__int64是Win32平台编译器64位长整型的定义方式,不能用于Linux。
c:“%lld”用于Linux i386平台编译器,”%I64d”用于Win32平台编译器。
d:cout只能用于C++编译,在VC6.0中,cout不支持64位长整型。
3、如果要使用64位的整数,尽量使用最新的编译器,Windows平台,尽量使用VS的较新版本,Linux平台,建议将gcc/g++升级到最新版本。
3. linux32位和64位的区别
第一点设计初衷不同:
64位操作系统的设计初衷是:满足机械设计和分析、三维动画、视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户需求。换句简明的话说就是:它们是高科技人员使用本行业特殊软件的运行平台。而32位操作系统是为普通用户设计的。
第二点寻址能力不同:
64位处理器的优势还体现在系统对内存的控制上。由于地址使用的是特殊的整数,因此一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。比如,Windows
Vistax64Edition支持多达128GB的内存和多达16TB的虚拟内存,而32位CPU和操作系统最大只可支持4G内存
第三点要求配置不同:
64位操作系统只能安装在64位电脑上(CPU必须是64位的)。同时需要安装64位常用软件以发挥64位(x64)的最佳性能。32位操作系统则可以安装在32位(32位CPU)或64位(64位CPU)电脑上。当然,32位操作系统安装在64位电脑上,其硬件恰似“大马拉小车”:64位效能就会大打折扣。
第四点运算速度不同:
关于32位和64位系统的差别,那真是说来话长,这里我们首先要了解一下CPU的架构技术,通常我们可以看到在计算机硬件上会有X86和X64的标识,其实这是两种不同的CPU硬件架构,x86代表32位操作系统
x64代表64位操作系统。那么这个32位和64位中的“位”又是什么意思呢?相对于32位技术而言,64位技术的这个位数指的是CPU
GPRs(General-Purpose
Registers,通用寄存器)的数据宽度为64位,64位指令集就是运行64位数据的指令,也就是说处理器一次可以运行64bit数据。举个通俗易懂但不是特别准确的例子:32位的吞吐量是1M,而64位吞吐量是2M。即理论上64位系统性能比32位的提高1倍。
4. Linux中32位和64位数据类型长度有哪些不同
基本数据类型
可以指定int的长度:
类似的,还有uint32_t和uint64_t
其它数据类型
1,size_t:跟机器字长一样;
2,off_t:32位机器下默认是32位长,这时无法对大于4G的文件偏移操作,这时off_t = __off_t;如果想进行大于4G的文件偏移操作,可以在程序中加入头文件之前定义
这时off_t = __off64_t,具体定义在unistd.h中;对于64位机,默认就是64位长。
#define _FILE_OFFSET_BITS 64
3,ino_t:跟机器字长一样。