为什么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的内存