![](/img/trans.png)
[英]IAR Compiler: using struct with function pointers, map file shows all the function declared in struct irrespective of function used or not
[英]Compiler treatment of struct function pointers
最近,我看到了一種在 C 中實現顯式命名空間類似物的有趣方法。這是通過使用struct
來存儲const
函數指針來實現的,如下所示:
foo.h:
extern const struct foo_namespace {
void (* const bar)(int a, int b);
int (* const baz)();
char *(* const qux)(const char *str);
} Foo;
foo.c:
#include "foo.h"
const struct foo_namespace Foo = {
.bar = /* some function */,
.baz = ... ,
.qux = ...
};
這允許將函數調用為Foo.bar()
,類似於 C++ 的Foo::bar()
。 一直在想這個技術,也想用,但是想到了一些問題。
編譯器是否可能內聯整個結構,以便通過函數指針的調用被函數本身替換? 這似乎不太可能,因為const
實際上並未聲明編譯時常量。 這也將使內聯任何命名空間函數變得不可能。
這可能存儲在哪個可執行部分? 如果可以破壞結構並安裝不同的函數指針,這似乎可能是一個安全問題。
1)你不在乎,分支預測的開銷以納秒為單位。
2) consts 通常被復制到 ram 以便更快地訪問。 但風險似乎與使用符號來解析函數相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.