博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《UNIX网络编程 卷1:套接字联网API(第3版)》——1.11 64位体系结构
阅读量:5902 次
发布时间:2019-06-19

本文共 1007 字,大约阅读时间需要 3 分钟。

本节书摘来自异步社区《UNIX网络编程 卷1:套接字联网API(第3版)》一书中的第1章,第1.11节,作者:【美】W. Richard Stevens , Bill Fenner , Andrew M. Rudoff著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.11 64位体系结构

20世纪90年代中期到未期开始出现向64位体系结构和64位软件发展的趋势。其原因之一是在每个进程内部可以由此使用更长的编址长度(即64位指针),从而可以寻址很大的内存空间(超过232字节)。现有32位Unix系统上共同的编程模型称为ILP32模型,表示整数(I)、长整数(L)和指针(P)都占用32位。64位Unix系统上变得最为流行的模型称为LP64模型,表示只有长整数(L)和指针(P)占用64位。图1-17对这两种模型进行了比较。

screenshot

从编程角度看,LP64模型意味着我们不能假设一个指针能存放在一个整数中。我们还必须考虑LP64模型对现有API的影响。

ANSI C创造了size_t数据类型,它用于作为malloc的唯一参数(待分配的字节数),或者作为read和write的第三个参数(待读或写的字节数)。在32位系统中size_t是一个32位值,但是在64位系统中它必须是一个64位值,以便发挥更大寻址模型的优势。这意味着64位系统中也许含有一个把size_t定义为unsigned long的typedef指令。联网API存在如下问题:POSIX的某些草案规定,存放套接字地址结构大小的函数参数具有size_t数据类型(如bind和connect的第三个参数)。某些XTI结构也含有数据类型为long的成员(如t_info和t_opthdr结构)。如果这些规定不加修改,当Unix系统从ILP32模型转变为LP64模型时,size_t和long都将从32位值变为64位值。这两个例子实际上并不需要使用64位的数据类型:套接字地址结构的长度最多也就几百个字节,给XTI的结构成员使用long数据类型则是个错误。

处理这些情况的办法是使用专门设计的数据类型。套接字API对套接字地址结构的长度使用socklen_t数据类型,XTI则使用t_scalar_t和t_uscalar_t数据类型。不把这些值由32位改为64位的理由是易于为那些已在32位系统中编译的应用程序提供在新的64位系统中的二进制代码兼容性。

转载地址:http://zbrsx.baihongyu.com/

你可能感兴趣的文章
.NET Core的日志[3]:将日志写入Debug窗口
查看>>
安全报告显示 2015 年 DDoS 攻击强度创新纪录
查看>>
使用jquery获取radio的值
查看>>
《Adobe After Effects CC 经典教程(彩色版)》——1.4 添加特效、修改图层属性...
查看>>
IDEA创建Maven Project图解
查看>>
Google China New Grad Test 2014 Round A Problem A
查看>>
Linux LVM学习总结——创建卷组VG
查看>>
图像直方图与直方图均衡化
查看>>
CUDA编程(一)第一个CUDA程序
查看>>
动态SQL应用小列子
查看>>
JMM和happens-before原则
查看>>
[j2me]二级菜单界面演练[三][0215update]
查看>>
git的几个小技巧
查看>>
C语言预处理命令之条件编译
查看>>
iOS开发之调用系统打电话发短信接口以及程序内发短信
查看>>
[Android]帧率测试
查看>>
UIKit 框架之Bar、Controller
查看>>
NodeJS写日志_Log4js使用详解+常见艰难的解决
查看>>
Nginx与前端开发
查看>>
python5 函数式编程
查看>>