• 12.C语言_数组


    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个字节,多出两个,与上同理。

     

     

    可以。对正向程序员来说,要避免出现数组越界,因为越界的值是不可控的。 

    但是如果熟悉堆栈图,可以利用数组越界做一些事情。

     

     上图程序为使用数组越界,制造缓冲区溢出。

  • 相关阅读:
    Python中常用的模块(sys模块)
    Python中常用的模块(OS模块)
    Python中常用的模块(time模块)
    Python中常用的模块(random模块)
    Python生成器详解
    Python装饰器详解
    python 两个list 求交集,并集,差集
    数据库中的视图索引
    数据库中的外键和主键理解
    mssql学习
  • 原文地址:https://www.cnblogs.com/RevelationTruth/p/13983277.html
Copyright © 2020-2023  润新知