为什么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的内存
浙公网安备 33010602011771号