64 位内核上有哪些 __attribute__ 的替代方案?
64 位内核上是否有任何替代非 ISO gcc 特定扩展 __attribute__
的方法?
我注意到的三种类型是:函数属性、类型属性和变量属性。
例如。 我想避免使用 __attribute__((__packed__))
作为通过网络传递的结构,即使一些基于 gcc 的代码确实使用它。
关于如何完全避免在 C 系统/内核代码中使用 __attribute__
有什么建议或指示吗?
谢谢 赛菲。
Is there any alternative to non-ISO gcc specific extension __attribute__
on 64-bit kernels ?
Three types that i've noticed are: function attributes, type attributes and variable attributes.
eg.
i'd like to avoid using __attribute__((__packed__))
for structures passed over the network, even though some gcc based code do use it.
Any suggestions or pointers on how to entirely avoid __attribute__
usage in C systems/kernel code ?
thanks
Saifi.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以逐段构建网络数据包,将每个数据元素复制到
char*
缓冲区中的正确位置。优点:没有任何对齐问题,并且通常是可移植的,特别是当您使用
中的精确宽度整数类型时缺点:它很乏味并且可能容易出错
You can build your network packets piece by piece, copying each data element into the correct place in a
char*
buffer.Pros: you don't have any alignment issues and it's generally portable, especially if you use the exact-width integer types from
<stdint.h>
Cons: it's tedious and potentially error-prone
根据您的评论,我假设您想要更改的是您的代码,而不是整个 Linux 内核(等)。
不确定函数属性等,但特别是对于属性打包,我已经完成了以下操作,到目前为止没有任何问题。
基本上,您可以使用手动填充字段与编译时断言相结合,而不是依赖编译器来打包。
要检查您的结构,您可以使用编译时断言,如下所示:
当您的断言错误时,构建将失败,并显示有用的错误和行号
I'm assuming based on your comments that its your code you want to change, not the whole Linux kernel (etc).
Not sure about function attributes etc but specifically for attribute packed, I have done the following with no issues so far.
Basically instead of relying on the compiler to pack, you could use manual pad fields coupled with compile-time asserts.
To check your structure you can use a compile time assert, something like this:
When your assertions are wrong, the build will fail with a helpful error and line number