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

     

     

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

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

     

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

  • 相关阅读:
    kubernetes
    dubbo
    前端控件+资源
    Gossip
    问题解决1
    react
    impala
    storm+Calcite
    ASP.NET页面传值与跳转
    经典FormsAuthenticationTicket 分析
  • 原文地址:https://www.cnblogs.com/RevelationTruth/p/13983277.html
Copyright © 2011-2022 走看看