常量折叠
来源:互联网 发布:与程序员有关的考试 编辑:程序博客网 时间:2024/04/28 11:05
/* 看下面这句的反汇编代码
cout << a << ", " << *p << endl;
00B11547 mov esi,esp
00B11549 mov eax,dword ptr [__imp_std::endl (0B1A340h)]
00B1154E push eax
00B1154F mov edi,esp
00B11551 mov ecx,dword ptr [p]
00B11554 mov edx,dword ptr [ecx]
00B11556 push edx
00B11557 push offset string ", " (0B17800h)
00B1155C mov ebx,esp
00B1155E push 1 // 关键看这一句,注意到输出打印a的值的时候传进去的并不是a
// 这个到底是哪来的,就是从我们的常量表里来的。
00B11560 mov ecx,dword ptr [__imp_std::cout (0B1A344h)]
00B11566 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0B1A32Ch)]
00B1156C cmp ebx,esp
00B1156E call @ILT+420(__RTC_CheckEsp) (0B111A9h)
00B11573 push eax
00B11574 call std::operator<<<std::char_traits<char> > (0B11159h)
00B11579 add esp,8
00B1157C mov ecx,eax
00B1157E call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0B1A32Ch)]
00B11584 cmp edi,esp
00B11586 call @ILT+420(__RTC_CheckEsp) (0B111A9h)
00B1158B mov ecx,eax
00B1158D call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0B1A34Ch)]
00B11593 cmp esi,esp
00B11595 call @ILT+420(__RTC_CheckEsp) (0B111A9h)
总结:编译器会为常量分配了地址,但是在使用常量的时,常量会被一立即数替换(保护常量,防止被破坏性修改)
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- c++常量折叠(常量替换)
- c++常量折叠(常量替换)
- 常量折叠-2
- 【转】ASP.NET的六大内置对象总结(
- 关于三层架构的一点点看法
- (转载)推荐2款3D游戏制作开发软件Blender3D 和3D RAD
- ASP.NET与IIS的安装问题
- 在sqldataadapter中定义sqlparameter参数
- 常量折叠
- 虚析构函数
- 后台向前台js传递参数
- QQ2440+Linux 2.6.32中NEC3.5屏配置
- SOJ 3109 Space flight
- c#处理excel表格
- Android粒子效果
- 浅谈GPIO(二)
- tomcat端口的问题