gpt4 book ai didi

结构函数指针的编译器处理

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:52 25 4
gpt4 key购买 nike

最近,我看到了一种有趣的方法,可以在 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) 常量通常被复制到 ram 以便更快地访问。但风险似乎与使用符号解析函数一样。

关于结构函数指针的编译器处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36229009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com