x86的字节对齐与不对齐的问题
2024-09-28 04:25:10
比如这么一个结构体
struct foo {
short s;
int n;
};
struct foo bar;
假设bar的地址是0x12345670
如果不按4字节对齐
那么bar.n的地址就是0x12345672, 也就是下面的黑体部分
0x12345670 a0 a1 a2 a3
0x12345674 b0 b1 b2 b3
为了取到n的值就需要访问两次内存,一次访问0x12345670,一次访问0x12345674
然后把两个int值组合在一起,a2 a3 b0 b1
http://www.doc88.com/p-205512154878.html 此文中说明更加详细易懂
市面上所说的64位处理器包括AMD Athlon 64与INTEL的EMT64处理器都是指通用寄存器的位宽,不是总线。
但要从数据总线方面来说,从80386开始就已经是32bit
而奔腾级别以上的CPU数据数据总线都是64bit了,包括安腾在内的64位服务器处理器。
而我们通常所说的32bit向64bit过度都是习惯上以通用寄存器的位宽来区分的。
还有一种更具体的说法是:
这里的64位技术是相对于32位而言的,这个位数指的是CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,
64位指令集就是运行64位数据的指令,也就是说处理器一次可以运行64bit数据。64bit处理器并非现在才有的,
在高端的RISC(Reduced Instruction Set Computing,精简指令集计算机)很早就有64bit处理器了,
比如SUN公司的UltraSparc Ⅲ、IBM公司的POWER5、HP公司的Alpha等。
引用自 http://bbs.csdn.net/topics/390291667?page=1
http://www.cnblogs.com/lancidie/archive/2011/08/18/2144071.html
最新文章
- Atitit.css 规范 bem  项目中 CSS 的组织和管理
- Source Xref 与 JavaDocs 学习理解
- 利用excel数据透视表实现快速统计相关数据
- linux 命令小例
- ds18b20里的 温度值正负判断 为什么要判断大于6348 ,为什么取这个值?
- RabbitMQ RPC问题
- bss段为什么要初始化,清除
- android 解析文章,通过JSON格式请求传递 的好文章,这里记录一下
- ubuntu 新建zend framework 项目
- 基于cxf开发restful风格的Web Service
- C语言中复数运算及调用blas,lapack中复数函数进行科学计算
- 【SSH/SFTP】SSH协议和SFTP
- java日期相关
- C++实用整数快速输入输出模板(C++)
- Android 8 wifi 扫描时间间隔
- [翻译]CSS3 Media Queries
- urlrewriteFilter condition----reference
- spring boot在intellij idea下整合mybatis可能遇到的问题
- 【Cf #502 H】The Films(莫队)
- 【目标检测大集合】R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记