簡體   English   中英

struct 函數指針的編譯器處理

[英]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() 一直在想這個技術,也想用,但是想到了一些問題。

  1. 編譯器是否可能內聯整個結構,以便通過函數指針的調用被函數本身替換? 這似乎不太可能,因為const實際上並未聲明編譯時常量。 這也將使內聯任何命名空間函數變得不可能。

  2. 這可能存儲在哪個可執行部分? 如果可以破壞結構並安裝不同的函數指針,這似乎可能是一個安全問題。

1)你不在乎,分支預測的開銷以納秒為單位。

2) consts 通常被復制到 ram 以便更快地訪問。 但風險似乎與使用符號來解析函數相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM