得闲饮茶

Just Do IT!

为什么char数组要占16的倍数内存

字符串溢出,但一般都需要16的倍数,即存在一个x,使得16x>=char数组长度这样的话,比16x还要长的字符会存到其他低地址变量中,如下:

#include<iostream>
#include<string>

int main()
{
    int i = 1;
    char b[25]={0};
    char c[25]={0};
    char a[25]={0};
    std::cout<<(int)&c<<std::endl;
    std::cout<<(int)&b<<std::endl;
    gets(c);
    std::cout<<c<<std::endl;
    std::cout<<b<<std::endl;
    std::cout<<a<<std::endl;
    std::cout<<i<<std::endl;
    std::cout<<(int)&c<<std::endl;
    std::cout<<(int)&b<<std::endl;
    system("pause");
    return 0; 
} 

输出:

2293536
2293568
123456789124567890145678912345678123456789124567891245678123456789
123456789124567890145678912345678123456789124567891245678123456789
8123456789124567891245678123456789

1
2293536
2293568
请按任意键继续. . .

个人结论:内存对齐导致char数组需要16倍数byte的内存

posted on 2011-04-05 21:36  圳哥  阅读(436)  评论(0编辑  收藏  举报

导航