zoukankan      html  css  js  c++  java
  • 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个字节,多出两个,与上同理。

     

     

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

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

     

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

  • 相关阅读:
    图解Eclipse中配置Maven并创建Maven的Web工程
    Bzoj1922: [Sdoi2010]大陆争霸
    Bzoj2007: [Noi2010]海拔
    Bzoj5212: [Zjoi2018]历史
    NOIP2017:列队
    NOIP2017:逛公园
    CF908D New Year and Arbitrary Arrangement
    HDU4652:Dice
    HDU4336:Card Collector(min-max容斥)
    [NOI2017]游戏
  • 原文地址:https://www.cnblogs.com/RevelationTruth/p/13983277.html
Copyright © 2011-2022 走看看