首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

内存储器对齐

2012-07-25 
内存对齐?1, 内存分配的时候,为什么要内存对齐,加入, 要分配4096BYTE大小内存, 以16字节对齐, 怎么做?2[解

内存对齐?
1, 内存分配的时候,为什么要内存对齐,

加入, 要分配4096BYTE大小内存, 以16字节对齐, 怎么做?

2

[解决办法]
去看这个

http://blog.ednchina.com/colinluan/159417/message.aspx
[解决办法]
内存对齐应该是可以设置的




[解决办法]
1.某些平台要求对齐有利于提高访问速度,而且如果不对齐可能出现访问错误。

[解决办法]
内存对齐可以提高访问数度。
详细的,可以看看 深入理解计算机系统
[解决办法]
提高访问速度
[解决办法]

探讨
如果 要分配4096 BYTE大小的内存, 以16字节对齐, 怎么做?

[解决办法]
探讨
引用:
如果 要分配4096 BYTE大小的内存, 以16字节对齐, 怎么做?


比如4096多分配16个字节,然后,将返回地址按照16的倍数对齐就可以了。
大概是这样:
char*p=(char*)malloc(4096+16);
char*q=(char*)(((unsigned int)p+16)&(~0XF));

[解决办法]
C/C++ code
#pragma pack( push, 1 ) // 设置按单字节对齐,不加这个下面两个结构体占用空间会不同(虽然表面上看上去相同)struct SMyStructA{    bool A;    int C;    char B;};struct SMyStructB{    bool A;    char B;    int C;};#pragma pack( pop )
[解决办法]
对齐很简单的,举个例子:

要求地址是16的倍数,给你一个地址,其二进制表示是:01101110,要求对齐后地址是16倍数,且大于等于当前地

址。

最低4位是1110,这些位只有全部是0,整个地址才能被16整除。

所以,分两种情况:

1,低4位本来就是0000,那么当前地址已经对齐了。
2,低4位不是0000,那么对齐的方法就是让低4位是0000,而且给地址加上10000,这就是比原地址大的第一个是16倍数的地址了。


C/C++ code
size_t round_up(size_t bytes, size_t align) { // 将bytes按照align对齐。一般bytes < align    return (((bytes) + align - 1) & ~(align - 1));} 

热点排行