198得票4回答
UNIX和Linux系统调用(以及用户空间函数)在i386和x86-64上的调用约定是什么?

以下链接介绍了UNIX(BSD风格)和Linux上的x86-32系统调用约定: http://www.int80h.org/bsdasm/#system-calls http://www.freebsd.org/doc/en/books/developers-handbook/x86-sy...

176得票8回答
什么是__stdcall?

我正在学习Win32编程,WinMain原型如下:int WINAPI WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show ) 我对于这个 WINAPI 标识符的作用感到困惑,后来...

137得票4回答
为什么Windows64在x86-64架构中使用不同的调用约定?

AMD有一份ABI规范,描述了在x86-64上使用的调用约定。除了Windows使用自己的x86-64调用约定外,所有操作系统都遵循它。为什么? 有人知道这种差异的技术、历史或政治原因吗?还是纯粹是因为NIH综合症? 我明白不同的操作系统可能需要更高级的东西,但这并不能解释为什么例如Win...

128得票7回答
调用栈是如何工作的?

我正在努力加深对编程语言低级操作的理解,特别是它们如何与操作系统/CPU交互。我可能已经阅读了Stack Overflow上所有堆栈/堆相关线程中的每个答案,它们都很出色。但仍有一件事情我还没有完全明白。 考虑下面这个伪代码函数,它往往是有效的Rust代码 ;-)fn foo() { ...

105得票4回答
为什么T*可以通过寄存器传递,但unique_ptr<T>不能?

我正在观看Chandler Carruth在CppCon 2019的演讲: 没有零成本抽象 在其中,他举例说明了使用std::unique_ptr&lt;int&gt;而不是int*所产生的开销之大令他感到惊讶;该部分开始于时间点17:25。 您可以查看他的示例代码片段(godbolt....

91得票9回答
__stdcall的含义和用法是什么?

最近我经常遇到 __stdcall。 MSDN并没有非常清楚地解释它的真正意义,何时以及为什么应该使用它(如果有必要)。 如果有人能够提供一个解释,最好附带一两个示例,那将不胜感激。

91得票3回答
在Windows上使用__cdecl还是__stdcall?

我正在为Windows开发一个C++库,它将作为DLL文件分发。我的目标是最大限度地提高二进制互操作性;更确切地说,我的DLL中的函数必须可以在使用多个版本的MSVC ++和MinGW编译的代码中使用,而无需重新编译DLL。然而,我对哪种调用约定最好感到困惑,cdecl还是stdcall。 有...

89得票3回答
x86-64 System V ABI 的文档在哪里可以找到?

x86-64 System V ABI(用于除Windows之外的所有系统)曾经存放在http://x86-64.org/documentation/abi.pdf上,但该网站现已失效。 是否有新的权威站点提供该文档?

81得票6回答
被调用者保存寄存器和调用者保存寄存器是什么?

我对调用者保存寄存器和被调用者保存寄存器之间的区别以及何时使用它们存在一些困惑。 我正在使用MSP430: 过程:mov.w #0,R7 mov.w #0,R6 add.w R6,R7 inc.w R6 cmp.w R12,R6 jl l$loop mov.w R7,R12 r...

77得票7回答
在方法内部获取调用方法的名称

我有一个在对象中被多处调用的方法。有没有一种快速简便的方式来获取调用这个常用方法的方法名称。 伪代码示例: public Main() { PopularMethod(); } public ButtonClick(object sender, EventArgs e) { ...