- 论坛徽章:
- 0
|
原帖由 rainballdh 于 2007-10-2 18:53 发表 ![]()
谢谢,但是这个是第二个问题,第一个问题如何解决?
这两个其实是同一个问题,关于为什么 分配内存的指针一般是以 4字节的 倍数开头 而 double 的指针要以 8的倍数开头 这与计算机的一种机制有关系,对于应用开发者来说 我们称这个问题为 字节序对齐。
对于CPU来说 一次性读取内存的长度是有限的,一般来说目前32位的CPU一次性可以读取32位,也就是内存的4个字节,同时CPU只从内存的4字节的整数倍的位置开始读取。以int 类型来说,CPU可以一次性将整型变量从内存取出来。而如果内存的地址不是以四个字节倍数开始则CPU需要读取两次甚至更多此才能将对应的操作数读取到内存。而众所周知内存的读取是龟速的,会严重损害系统性能。至于32 位CPU为什么要以
4的倍数读取这涉及到cpu的设计原理,具体的情况请参考 计算机原理的课程学习。典型的是MIPS CPU对于整数类型的内存地址如果不以4的倍数开始会造成系统异常,顺便抱怨一下垃圾的MIPS的CPU。
当然目前64位的CPU的字节对齐已经是8字节了,所以64位的CPU相对来说不能有效的利用内存空间。
但是利用上述原理来检验系统分配内存的指针 是很不科学的,跟编译器,CPU平台以及代码有关,所以算不得通用代码。 |
|