有人可以解释__declspec(裸体)吗?

我正在考虑将用于Windows的脚本引擎移植到Linux; 这是Winamp的可视化平台AVS。 我不确定目前是否有可能。 从我可以告诉代码正在C函数的地址nseel_asm_atannseel_asm_atan_end并将它们存储在一个表,它可以在代码执行过程中引用。

我已经看了MS的文档,但我不确定什么__declspec(naked)真的。 文档中提到的prolog和epilog代码是什么? 这与Windows调用约定有关吗? 这是便携式吗? 知道使用类似技术的任何基于Linux的示例?

 static double (*__atan)(double) = &atan; __declspec ( naked ) void nseel_asm_atan(void) { FUNC1_ENTER *__nextBlock = __atan(*parm_a); FUNC_LEAVE } __declspec ( naked ) void nseel_asm_atan_end(void) {} 

Solutions Collecting From Web of "有人可以解释__declspec(裸体)吗?"

基本上,函数序言为局部变量设置了一个堆栈框架,结尾部分负责清理它。 这通常由编译器自动完成。 如果你使用__declspec(naked) ,设置这个堆栈框架将取决于你,所以它给你更多的灵活性。

有很多参考文献: 这里 , 这里 , 还有更多。

GNU的gcc编译器也支持裸体,但显然不适用于x86: 在页面中搜索“裸体” (我还没有试图看看它是否在x86上)