1
4
如果您将函数放在它自己的特殊链接器部分中,那么您的工具链可能会提供指向链接器部分末尾(和开头)的指针。例如,使用Green Hills Software(GHS)MULTI-compiler,我相信您可以执行以下操作:
这将告诉链接器在中查找MyFunction的代码。我的部分。然后在代码中可以声明以下指针,这些指针指向节的开头和结尾。GHS链接器自动提供定义。
我不知道GCC是否支持类似的功能。 |
2
3
您没有说明为什么需要这些信息,但在某些嵌入式系统上,需要将单个功能从闪存复制到ram,以便(重新)编程闪存。 通常,您将此函数放置到一个新的唯一部分,根据链接器的不同,您可以使用纯C或汇编程序将此部分复制到新的(RAM)位置。 您还需要告诉链接器,代码将从另一个地址运行,而不是放在flash中。 在一个项目中,闪光灯。c可能看起来像
链接器命令文件如下所示
但正如其他人所说,这是非常特定于工具链的 |
3
1
C无法指向函数的结尾。C编译器在如何安排编译期间发出的机器代码方面有很大的自由度。通过各种优化设置,C编译器实际上可能会合并混合了各种函数的机器代码的机器代码。 因为除了C编译器所做的之外,链接器和加载程序所做的也是将各种编译后的目标代码链接在一起,然后加载可能也使用各种共享库的应用程序的一部分。 在现代操作系统和现代开发工具链的复杂运行环境中,除非该语言提供了一种特定的执行机制,否则谨慎的做法是不要想入非非地将自己留给一个由于操作环境的变化而突然停止工作的应用程序。 在大多数情况下,如果将编译器的非优化设置与静态链接库一起使用,大多数链接器提供的符号映射将为您提供函数开始和结束位置的好主意。然而,您唯一真正可以依赖的是知道函数入口点的地址。 |
4
0
在某些实现(包括gcc)中,您可以这样做(但这并不能保证,许多实现细节可能会影响它):
|
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |