我试图使用汇编代码 - ARMv7-a来实现C++函数,具体而言.现在我遇到一个程序,我不知道如何在汇编中实现C++函数模板.我尝试使用-S -O1标志编译源代码以查看生成的程序集但无法理解它.任何人都能简单介绍一下如何将C++模板转换为汇编代码吗?只需使用以下简单函数作为示例:
template<typename T>
T f(T a) {
return a + 1;
}
Run Code Online (Sandbox Code Playgroud)
如果您发现任何其他功能更容易解释,请执行此操作.谢谢!
正确地说出它会有所帮助.它不是模板功能,它的功能模板 ......注意到了区别?
模板,是在实例化时生成代码.所以在这种情况下,如果你实例化f的int组装将是相同的
int f(int a) { // Note that having a return type void is wrong here
return a + 1;
}
Run Code Online (Sandbox Code Playgroud)
对于非实例化模板,缺少二进制代码生成.这就是为什么在执行有问题类型的实例化之前,模板代码中的许多错误仍然处于休眠状态的原因.
所以对于一个真实的例子,这里有两个版本,一个是从函数模板生成的,另一个是函数生成的(两者都是int); 如果不是因为右边的提示不能告诉差异:
f2(1);
00BA25BE push 1
00BA25C0 call f2<int> (0BA12F3h)
00BA25C5 add esp,4
f(1);
00BA25C8 push 1
00BA25CA call f (0BA12EEh)
00BA25CF add esp,4
Run Code Online (Sandbox Code Playgroud)
更多关于模板(类型这段时间)和二进制代码表示这里
您应该在单独的程序集中实现模板的每个实例.
从根本上说,每个模板实例都是不同的类型.你还需要处理专业化; 部分或其他.
(当然,这意味着您需要事先知道您需要哪一组T,但这基本上是C++编译器所做的.)
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |