溢出和大小端

作者: 包佳奇 | 来源:发表于2017-05-16 21:55 被阅读59次

    在IOS开发的过程中,溢出会在解决问题中遇到,但是大小端一般不会遇到,最近也是研究了一下分享给大家

    溢出
    一、概念:
    数据类型超过了计算机字长的界限而出现的数据溢出,也就是说当应用程序读取用户数据,复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时 ,就存在溢出现象.
    二、代码示例:

    #include <stdio.h>
    int main(void) {
        short var_s=32767;
        var_s++;
        printf("var_s+1=%d\n",var_s++);
        return 0;
    }
    

    三、日志打印:

    var_s+1=-32768
    Program ended with exit code: 0
    

    四、原因分析:
    短整型short int存储空间是2个字节,16位,有效范围:-215~215-1,即-32768~32767,当var_s加1后就无法保证内存空间足够大去存储,所以结果不会是32768.

    大小端
    一、概念:
    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,地址由低到高增加,而数据从高位往低位放。
    小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
    二、代码示例:

    #include <stdio.h>
    int main(void) {
        short var_s=0x1234;
        unsigned char *var_p;
        var_p=&var_s;
        printf("var_p content is %p\n",var_p);
        printf("var_p+1 content is %p\n",var_p+1);
        printf("*var_p= %d\n",*var_p);
        printf("*(var_p+1)= %d\n",*(var_p+1));
        return 0;
    }
    

    三、日志打印:

    var_p content is 0x7fff5fbff7ca
    var_p+1 content is 0x7fff5fbff7cb
    *var_p=52//0x34
    *(var_p+1) =18//0x12
    Program ended with exit code: 0
    

    四、图例说明:

    大小端.png

    注:编译器不同可能大小端的存储方式也不同,也就是说在这台电脑试验是大端,可能在别的电脑试验出小端存储

    相关文章

      网友评论

        本文标题:溢出和大小端

        本文链接:https://www.haomeiwen.com/subject/vykrxxtx.html