测试函数的模板实现

  1. /// @file my_template.h
  2. /// @brief 测试数据类型用的模板实现
  3. #ifndef MY_TEMPLATE_H_2016_0123_1226
  4. #define MY_TEMPLATE_H_2016_0123_1226
  5. template<int iArySize>
  6. void fnTestDataType() {
  7. char szBuf[iArySize] = {'\0'};
  8. unsigned short wTmp = 0;
  9. int iTmp = 0;
  10. long lTmp = 0;
  11. float f = .0f;
  12. double dbl = .0;
  13. char szBuf1[iArySize] = {'\0'};
  14. unsigned short wTmp1 = 0;
  15. int iTmp1 = 0;
  16. long lTmp1 = 0;
  17. float f1 = .0f;
  18. double dbl1 = .0;
  19. printf("============================================================\n");
  20. printf("char array size = %d\n", iArySize);
  21. printf("------------------------------------------------------------\n");
  22. printf("&szBuf[0] = \t0x%p\n", &szBuf[0]);
  23. printf("&szBuf[%d] = \t0x%p\n", iArySize - 1, &szBuf[iArySize - 1]);
  24. printf("&wTmp = \t0x%p\n", &wTmp);
  25. printf("&iTmp = \t0x%p\n", &iTmp);
  26. printf("&lTmp = \t0x%p\n", &lTmp);
  27. printf("&f = \t\t0x%p\n", &f);
  28. printf("&dbl = \t\t0x%p\n", &dbl);
  29. printf("&szBuf1[0] = \t0x%p\n", &szBuf1[0]);
  30. printf("&szBuf1[%d] = \t0x%p\n", iArySize - 1, &szBuf1[iArySize - 1]);
  31. printf("&wTmp1 = \t0x%p\n", &wTmp1);
  32. printf("&iTmp1 = \t0x%p\n", &iTmp1);
  33. printf("&lTmp1 = \t0x%p\n", &lTmp1);
  34. printf("&f1 = \t\t0x%p\n", &f1);
  35. printf("&dbl1 = \t0x%p\n\n", &dbl1);
  36. };
  37. #endif // #ifndef MY_TEMPLATE_H_2016_0123_1226

测试代码和实验结论

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

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

DEBUG模式下, 内存中的变量地址分析的更多相关文章

  1. eclipse在debug模式下鼠标移动到变量上不显示值的问题

    在eclipse中调试时,鼠标移动到变量上不显示值,使用ctrl+shift+i,或者通过配置达到目的: Window->Preferences->Java->Editor-> ...

  2. 引入 Tinker 之后如何在 Debug 模式下开启 Instant Run

    在<Tinker + Bugly + Jenkins 爬坑之路>一文中讲了在接入 Tinker 之后,Jenkins 中的一些坑,由此,热修复算告一段落,但是,在直接 Run 模式运行时, ...

  3. Debug模式下编译溢出问题

    问题: 代码在Debug模式下编译报出内存溢出的错误,而Release模式下则没有. 由于Debug模式下包含调试信息,并且不作任何优化.而Release模式进行了各种优化,内存检测等操作均省去,使得 ...

  4. C++程序在debug模式下遇到Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call问题。

    今天遇到一个Access Violation的crash,只看crash call stack没有找到更多的线索,于是在debug模式下又跑了一遍,遇到了如下的一个debug的错误提示框: 这个是什么 ...

  5. Mach-O在内存中符号表地址、字符串表地址的计算

    KSCrash 是一个用于 iOS 平台的崩溃捕捉框架,最近读了其部分源码,在 KSDynamicLinker 文件中有一个函数,代码如下: /** Get the segment base addr ...

  6. 重写NSLog,Debug模式下打印日志和当前行数

    在pch文件中加入以下命令,NSLog在真机测试中就不会打印了 //重写NSLog,Debug模式下打印日志和当前行数 #if DEBUG #define NSLog(FORMAT, ...) fpr ...

  7. Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录

    项目无法启动了 简单的介绍一下事件过程:周一的早上,收到前端同事抛过来的一个任务,说是一个接口无法正常返回数据,于是就让他把参数发过来,我想试着在本地重现一下并且将问题修复掉,这种情况肯定是要通过de ...

  8. Myeclipse在debug模式下没加断点程序卡住,start模式下可以正常启动

    参考<eclipse在debug模式下卡住,start模式下可以启动>,地址:https://blog.csdn.net/jack_chen1994/article/details/761 ...

  9. eclipse的debug模式下启动不了tomcat

    使用eclipse启动tomcat,正常模式下可以启动tomcat,却在debug模式下无法启动tomcat. 这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动to ...

随机推荐

  1. ajax对服务器路径请求

    $.post('/aaaa/bbbb/cccc', { "paraName": value}, function (data) {                        S ...

  2. BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )

    做一次MST, 枚举不在最小生成树上的每一条边(u,v), 然后加上这条边, 删掉(u,v)上的最大边(或严格次大边), 更新答案. 树链剖分然后ST维护最大值和严格次大值..倍增也是可以的... - ...

  3. [转] Chrome 控制台不完全指南

    转自: http://www.cnblogs.com/Wayou/p/chrome-console-tips-and-tricks.html#home Chrome的开发者工具已经强大到没朋友的地步了 ...

  4. 用C语言打印出三角函数

    在网上看到一个实例,是用C 中的* 打印出三角函数cos #include<stdio.h> #include<math.h> int main() { double y; i ...

  5. hackyviewpager有什么用

    继承于viewpager 可以和photoView一起使用,实现相册图片的左右滑动,放大缩小,等 package davidwang.tm.view; import android.content.C ...

  6. 引用 U-boot给kernel传参数和kernel读取参数—struct tag

    引用 清风徐徐 的 U-boot给kernel传参数和kernel读取参数—struct tag U-boot会给Linux Kernel传递很多参数,如:串口,RAM,videofb等.而Linux ...

  7. 转:MySql的commit和rollback

    从功能上划分,SQL 语言可以分为DDL,DML和DCL三大类.1. DDL(Data Definition Language)     数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ...

  8. Android自定义组合控件:UIScrollLayout(支持界面滑动及左右菜单滑动)

    一.前言: 我之前很早的时候,写过一篇<左右滑出菜单>的文章: http://blog.csdn.net/qingye_love/article/details/8776650 用的是对V ...

  9. FLUSH TABLES WITH READ LOCK 锁全局

    [root@wx03 ~]# cat a3.sh mysql -uroot -p1234567<<eof use scan; FLUSH TABLES WITH READ LOCK; sy ...

  10. Android中的Audio播放:控制Audio输出通道切换

    Audio 输出通道有很多,Speaker.headset.bluetooth A2DP等.通话或播放音乐等使用Audio输出过程中,可能发生Audio输出通道的切换.比如,插入有线耳机播放音乐时,声 ...