为什么他们说 C++ 比 C 慢?
即使代码相同?
请解释一下
关于模板类的信息有很多,但是我仍然没有找到任何关于非模板类中的模板方法的信息。
当我尝试这样做时,编译器会抱怨很多:
class c
{
public:
template<class T>
void method(const T& arg)
{
}
template<>
void method<int>(const int& arg)
{
}
};
如何正确地做到这一点?
由于-Wold-style-cast,编译器会抱怨(其中定义了许多内联函数),但制作普通的 plus 文件或将函数传输到 .c 不是一个选项。
可以采取什么措施来防止编译器抛出警告?
有一个汇编器插入
int offset = 4;
__asm__ __volatile__(
"pushl %%ebp\n\t"
"int $0x40\n\t"
"popl %%ebp"
::
"a"(45),
"b"(40), // Здесь передаются еще какие то значения, но это неважно
"c"(4),
"d"(5),
"S"(9),
"D"(0)
);
所以,中断需要通过ebp寄存器传递一个参数(即offset变量)。即使在阅读了各种资料后,我仍然不明白,但它需要完成。
也就是说,在汇编程序中,这段代码应该看起来像这样(偏移量是从上面的某个地方传输的):
mov 45, eax
mov 40, ebx,
mov 4, ecx
mov 5, edx,
mov 9, esi
mov 0, edi
pushl ebp
mov offset, ebp
int 40h
popl ebp
用汇编程序单独编写不是我的选择
有这个汇编器插入到函数中:
void func(void*, int, int, int, int, int, void*, int offset){
...
__asm__ __volatile__ (
"pushl %%ebp,\n\t" // save EBP register
"movl 0x24(%%ebp), %%ebp\n\t" // 0x24 - "offset" param
"int $0x40\n\t"
"popl %%ebp" // restore EBP register
...
::"a"(65)
...
);
你能解释一下为什么使用pushl而不是push以及关于\n\t