C语言很重要的两个点,一个是数组,一个是指针。
数组空间大小必须是确定的,不能是变量,汇编代码好提升相应空间的堆栈。
定义完数组,使用的是堆栈的默认填充值CC,要初始化。
函数默认堆栈提升为0x40;
char类型数组 10个值,对应空间为0x4C-0x40 = C(12),为什么多出来两个?
牵扯到本机宽度的问题-----16位计算机对 2个字节(16位,通用寄存器即16位)支持是最好的;32位计算机对4个字节(32位,通用寄存器即32位)支持是最好的,64位的同理,从硬件角度去理解。
所以32位,分配内存空间时按4个字节对齐,故此分配了4的倍数12。 浪费两个无所谓,操作的时候可以当成3个四字节效率更高,是牺牲空间换时间的算法。
short类型 10个值,对应20个字节。 9个值,仍是对应20个字节,多出两个,与上同理。
可以。对正向程序员来说,要避免出现数组越界,因为越界的值是不可控的。
但是如果熟悉堆栈图,可以利用数组越界做一些事情。
上图程序为使用数组越界,制造缓冲区溢出。