gcc/g ++中__declspec(裸)的等价物

Met*_*est 9 c c++ linux gcc g++

__declspec( naked )gcc/g ++中相当于什么?__declspec( naked )实际上用于声明一个没有任何结语和序幕的函数.

sno*_*rpe 10

在某些体系结构中,gcc支持一个名为"naked"的属性; 最新的gcc文档我给出了这个架构列表:ARM,AVR,MCORE,RX和SPU.

如果您正在使用其中一种体系结构(如果您尝试使用它并且不支持,gcc会给您一个警告),该属性可以像这样使用:

__attribute__ ((naked)) int fun ()
{
}
Run Code Online (Sandbox Code Playgroud)

[最近在gcc开发人员列表上进行了一些讨论,关于添加"naked"属性作为更一般的功能,并尝试在更多架构上支持它,但显然这对你没有帮助:).


Bas*_*tch 0

我相信 Linux 下最近的 GCC 没有这样的等价物。编译器在适当的时候发出序言和尾声,您应该将这个决定留给它。它可能非常擅长使序言或尾声变得非常小,甚至有时甚至不存在。

您可以用汇编语言编写您的函数。或者您可以将 asm 语句放入您的函数中。

而且你没有说出为什么要这样做。你的目标是什么?你为什么要问?

  • 在嵌入式系统中能够执行裸函数非常重要,因为堆栈位于 RAM 中,并且避免将代码执行保留在 ROM 中非常有用(例如,只要 RAM 未初始化)。 (4认同)
  • 你是用 GCC 做的吗?SigTerm引用的页面与我所说的一致:如果你不希望GCC和Linux(在x86或AMD64目标机器上)没有序言或尾声,请使用asm。 (3认同)