zoukankan      html  css  js  c++  java
  • DEBUG模式下, 内存中的变量地址分析

    测试函数的模板实现

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. /// @file my_template.h  
    2. /// @brief 测试数据类型用的模板实现  
    3.   
    4. #ifndef MY_TEMPLATE_H_2016_0123_1226  
    5. #define MY_TEMPLATE_H_2016_0123_1226  
    6.   
    7. template<int iArySize>  
    8. void fnTestDataType() {  
    9.     char szBuf[iArySize] = {''};  
    10.     unsigned short wTmp = 0;  
    11.     int iTmp = 0;  
    12.     long lTmp = 0;  
    13.     float f = .0f;  
    14.     double dbl = .0;  
    15.       
    16.     char szBuf1[iArySize] = {''};  
    17.     unsigned short wTmp1 = 0;  
    18.     int iTmp1 = 0;  
    19.     long lTmp1 = 0;  
    20.     float f1 = .0f;  
    21.     double dbl1 = .0;  
    22.       
    23.     printf("============================================================ ");  
    24.     printf("char array size = %d ", iArySize);  
    25.     printf("------------------------------------------------------------ ");  
    26.     printf("&szBuf[0] =  0x%p ", &szBuf[0]);  
    27.     printf("&szBuf[%d] =  0x%p ", iArySize - 1, &szBuf[iArySize - 1]);  
    28.     printf("&wTmp =  0x%p ", &wTmp);  
    29.     printf("&iTmp =  0x%p ", &iTmp);  
    30.     printf("&lTmp =  0x%p ", &lTmp);  
    31.     printf("&f =  0x%p ", &f);  
    32.     printf("&dbl =  0x%p ", &dbl);  
    33.       
    34.     printf("&szBuf1[0] =  0x%p ", &szBuf1[0]);  
    35.     printf("&szBuf1[%d] =  0x%p ", iArySize - 1, &szBuf1[iArySize - 1]);  
    36.     printf("&wTmp1 =  0x%p ", &wTmp1);  
    37.     printf("&iTmp1 =  0x%p ", &iTmp1);  
    38.     printf("&lTmp1 =  0x%p ", &lTmp1);  
    39.     printf("&f1 =  0x%p ", &f1);  
    40.     printf("&dbl1 =  0x%p ", &dbl1);  
    41. };  
    42.   
    43.   
    44.   
    45. #endif // #ifndef MY_TEMPLATE_H_2016_0123_1226  

    测试代码和实验结论

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. /// @file main.cpp  
    2. /// @brief DEBUG模式下, 内存中的变量地址分析  
    3.   
    4. #include <iostream>  
    5. using namespace std;  
    6.   
    7. #include "my_template.h"  
    8.   
    9. /** 试验结论 - <<DEBUG模式下, 内存中的变量地址分析>> 
    10.     如果定义多个变量 
    11.     DEBUG模式下, 内存中的变量地址和定义的顺序相同 
    12.     变量开始地址都是模式地址 
    13.     先定义的变量在内存高地址 
    14.     后定义的变量在内存低地址 
    15.  
    16.     Release模式下, 经过优化, 变量的内存地址和变量定义的顺序不相同! 
    17.     如果变量有越界访问的情况, Release模式下的越界访问情况未知. 
    18.     好像有一些规律, 依赖于编译器的优化选项 
    19.     依赖变量越界访问达成变量的存取, 在Release模式下会和Debug模式下的运行效果不相同. 
    20.     运行结果肯定不对了. 是否报错,要看运气了. 如果不报错, 发布后会死的很惨 
    21. */  
    22.   
    23. int main(int argc, char* argv[]) {  
    24.       
    25.     /// 将函数模板特化的数组大小, 从1填到9来测试  
    26.     /// 不能直接在一个作用域内写多个函数模板的实例, 会全被替换成最后一个函数模板的实例  
    27.     fnTestDataType<9>();  
    28.     printf(""); //< bp  
    29.   
    30.     /** IDE debug 变量内存地址分析 
    31.     ============================================================ 
    32.     char array size = 9 
    33.     ------------------------------------------------------------ 
    34.     &szBuf[0] =     0x0018FEE8 
    35.     &szBuf[8] =     0x0018FEF0 
    36.     &wTmp =         0x0018FEE4 
    37.     &iTmp =         0x0018FEE0 
    38.     &lTmp =         0x0018FEDC 
    39.     &f =            0x0018FED8 
    40.     &dbl =          0x0018FED0 
    41.     &szBuf1[0] =    0x0018FEC4 
    42.     &szBuf1[8] =    0x0018FECC 
    43.     &wTmp1 =        0x0018FEC0 
    44.     &iTmp1 =        0x0018FEBC 
    45.     &lTmp1 =        0x0018FEB8 
    46.     &f1 =           0x0018FEB4 
    47.     &dbl1 =         0x0018FEAC 
    48.      
    49.     ============================================================ 
    50.     char array size = 8 
    51.     ------------------------------------------------------------ 
    52.     &szBuf[0] =     0x0018FEEC 
    53.     &szBuf[7] =     0x0018FEF3 
    54.     &wTmp =         0x0018FEE8 
    55.     &iTmp =         0x0018FEE4 
    56.     &lTmp =         0x0018FEE0 
    57.     &f =            0x0018FEDC 
    58.     &dbl =          0x0018FED4 
    59.     &szBuf1[0] =    0x0018FECC 
    60.     &szBuf1[7] =    0x0018FED3 
    61.     &wTmp1 =        0x0018FEC8 
    62.     &iTmp1 =        0x0018FEC4 
    63.     &lTmp1 =        0x0018FEC0 
    64.     &f1 =           0x0018FEBC 
    65.     &dbl1 =         0x0018FEB4 
    66.      
    67.     ============================================================ 
    68.     char array size = 7 
    69.     ------------------------------------------------------------ 
    70.     &szBuf[0] =     0x0018FEEC 
    71.     &szBuf[6] =     0x0018FEF2 
    72.     &wTmp =         0x0018FEE8 
    73.     &iTmp =         0x0018FEE4 
    74.     &lTmp =         0x0018FEE0 
    75.     &f =            0x0018FEDC 
    76.     &dbl =          0x0018FED4 
    77.     &szBuf1[0] =    0x0018FECC 
    78.     &szBuf1[6] =    0x0018FED2 
    79.     &wTmp1 =        0x0018FEC8 
    80.     &iTmp1 =        0x0018FEC4 
    81.     &lTmp1 =        0x0018FEC0 
    82.     &f1 =           0x0018FEBC 
    83.     &dbl1 =         0x0018FEB4 
    84.      
    85.     ============================================================ 
    86.     char array size = 6 
    87.     ------------------------------------------------------------ 
    88.     &szBuf[0] =     0x0018FEEC 
    89.     &szBuf[5] =     0x0018FEF1 
    90.     &wTmp =         0x0018FEE8 
    91.     &iTmp =         0x0018FEE4 
    92.     &lTmp =         0x0018FEE0 
    93.     &f =            0x0018FEDC 
    94.     &dbl =          0x0018FED4 
    95.     &szBuf1[0] =    0x0018FECC 
    96.     &szBuf1[5] =    0x0018FED1 
    97.     &wTmp1 =        0x0018FEC8 
    98.     &iTmp1 =        0x0018FEC4 
    99.     &lTmp1 =        0x0018FEC0 
    100.     &f1 =           0x0018FEBC 
    101.     &dbl1 =         0x0018FEB4 
    102.      
    103.     ============================================================ 
    104.     char array size = 5 
    105.     ------------------------------------------------------------ 
    106.     &szBuf[0] =     0x0018FEEC 
    107.     &szBuf[4] =     0x0018FEF0 
    108.     &wTmp =         0x0018FEE8 
    109.     &iTmp =         0x0018FEE4 
    110.     &lTmp =         0x0018FEE0 
    111.     &f =            0x0018FEDC 
    112.     &dbl =          0x0018FED4 
    113.     &szBuf1[0] =    0x0018FECC 
    114.     &szBuf1[4] =    0x0018FED0 
    115.     &wTmp1 =        0x0018FEC8 
    116.     &iTmp1 =        0x0018FEC4 
    117.     &lTmp1 =        0x0018FEC0 
    118.     &f1 =           0x0018FEBC 
    119.     &dbl1 =         0x0018FEB4 
    120.      
    121.     ============================================================ 
    122.     char array size = 4 
    123.     ------------------------------------------------------------ 
    124.     &szBuf[0] =     0x0018FEF0 
    125.     &szBuf[3] =     0x0018FEF3 
    126.     &wTmp =         0x0018FEEC 
    127.     &iTmp =         0x0018FEE8 
    128.     &lTmp =         0x0018FEE4 
    129.     &f =            0x0018FEE0 
    130.     &dbl =          0x0018FED8 
    131.     &szBuf1[0] =    0x0018FED4 
    132.     &szBuf1[3] =    0x0018FED7 
    133.     &wTmp1 =        0x0018FED0 
    134.     &iTmp1 =        0x0018FECC 
    135.     &lTmp1 =        0x0018FEC8 
    136.     &f1 =           0x0018FEC4 
    137.     &dbl1 =         0x0018FEBC 
    138.      
    139.     ============================================================ 
    140.     char array size = 3 
    141.     ------------------------------------------------------------ 
    142.     &szBuf[0] =     0x0018FEF0 
    143.     &szBuf[2] =     0x0018FEF2 
    144.     &wTmp =         0x0018FEEC 
    145.     &iTmp =         0x0018FEE8 
    146.     &lTmp =         0x0018FEE4 
    147.     &f =            0x0018FEE0 
    148.     &dbl =          0x0018FED8 
    149.     &szBuf1[0] =    0x0018FED4 
    150.     &szBuf1[2] =    0x0018FED6 
    151.     &wTmp1 =        0x0018FED0 
    152.     &iTmp1 =        0x0018FECC 
    153.     &lTmp1 =        0x0018FEC8 
    154.     &f1 =           0x0018FEC4 
    155.     &dbl1 =         0x0018FEBC 
    156.      
    157.     ============================================================ 
    158.     char array size = 2 
    159.     ------------------------------------------------------------ 
    160.     &szBuf[0] =     0x0018FEF0 
    161.     &szBuf[1] =     0x0018FEF1 
    162.     &wTmp =         0x0018FEEC 
    163.     &iTmp =         0x0018FEE8 
    164.     &lTmp =         0x0018FEE4 
    165.     &f =            0x0018FEE0 
    166.     &dbl =          0x0018FED8 
    167.     &szBuf1[0] =    0x0018FED4 
    168.     &szBuf1[1] =    0x0018FED5 
    169.     &wTmp1 =        0x0018FED0 
    170.     &iTmp1 =        0x0018FECC 
    171.     &lTmp1 =        0x0018FEC8 
    172.     &f1 =           0x0018FEC4 
    173.     &dbl1 =         0x0018FEBC 
    174.      
    175.     ============================================================ 
    176.     char array size = 1 
    177.     ------------------------------------------------------------ 
    178.     &szBuf[0] =     0x0018FEF0 
    179.     &szBuf[0] =     0x0018FEF0 
    180.     &wTmp =         0x0018FEEC 
    181.     &iTmp =         0x0018FEE8 
    182.     &lTmp =         0x0018FEE4 
    183.     &f =            0x0018FEE0 
    184.     &dbl =          0x0018FED8 
    185.     &szBuf1[0] =    0x0018FED4 
    186.     &szBuf1[0] =    0x0018FED4 
    187.     &wTmp1 =        0x0018FED0 
    188.     &iTmp1 =        0x0018FECC 
    189.     &lTmp1 =        0x0018FEC8 
    190.     &f1 =           0x0018FEC4 
    191.     &dbl1 =         0x0018FEBC 
    192.     */  
    193.   
    194.     printf("END, press any key to quit ");  
    195.     return 0;  
    196. }  

    http://blog.csdn.net/lostspeed/article/details/50569619

  • 相关阅读:
    go学习-环境安装1-WIN10如何安装wsl2
    go学习-环境安装2-wsl2安装docker
    go学习-使用swagger生成接口文档
    go学习-WSL安装gcc
    go学习-如何修改Docker0的IP地址的默认网段
    go学习-go-sqlmock数据库操作测试
    go学习-环境安装3-wsl安装golang
    java基础学习-Stream API
    go学习-gorm
    go学习-获取form表单提交数据
  • 原文地址:https://www.cnblogs.com/findumars/p/5187267.html
Copyright © 2011-2022 走看看