C语言大型项目中那些结构体是如何定下来,操作系统里有些结构体特别复杂,好多指针指向链表,他们如何设计?
来源:互联网 发布:adobeillustrator mac 编辑:程序博客网 时间:2024/05/22 10:36
作者:姚冬
链接:https://www.zhihu.com/question/26292776/answer/32548584
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/26292776/answer/32548584
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
结构体的设计主要考虑几个问题:
1. 编译环境无关,主要就是sizeof问题,尽量用typedef过的类型,比如DWORD uint32_t,可以准确控制大小,另外字节对齐也要考虑,最好用#pragma pack也指定对齐方式,可以做到兼容32 64位。
2. 节约空间,声明的顺序要想好,最好按照字节对齐摆放,如果你非要一个 char,一个int地间隔声明就会浪费很多空间。另外用 数组还是指针加长度,要好好考虑下,在可预见的未来长度有限就用数组,否则指针加长度,指针加长度毕竟会导致多一块内存分配,而且这样结构体不能简单地通过memcpy复制了,要慎重。如果有好多bool型的值,可以考虑用位来表示 struct { int x:1, int y:1 int z:1 },或者声明成DWORD,然后用按位声明的值去或出来,比如 Windows style, WS_VISIBLE | WS_CAPTION
3. 前后兼容,如果未来可能会修改的,最好在结构体开头放一个 version,表示版本,使用者要注意检查版本号,可以保持前后兼容,修改了声明就改下版本号。Windows的做法是放一个cbSize,反正通常改结构体的话sizeof也是会变的。保留几个 reserve供未来使用也可以。
4. 命名,我喜欢给结构体一个统一的前缀,而且全大写,让人一眼就看出这是个结构,和其他的class interface区分开。编辑于 2014-10-28
阅读全文
0 0
- C语言大型项目中那些结构体是如何定下来,操作系统里有些结构体特别复杂,好多指针指向链表,他们如何设计?
- C语言指针学习笔记:指向结构体的指针
- C语言指向结构体数组的指针
- IOS开发---C语言-⑰指向结构体的指针
- C语言指向结构体数组的指针
- 【C语言】结构体包含指向自己的指针
- 【C语言经典实例】-指向结构体的指针变量
- C语言_指向结构体的指针_plusC14.4
- c语言指向结构体数组的指针
- C语言基础:C语言结构体(5) - 指向结构体的指针
- c语言:通过指向结构体变量的指针变量输出结构体变量中成员的信息
- 【C++】指向结构体变量的指针
- c语言中结构体指针
- C语言结构体里的成员数组和指针
- C语言结构体里的成员数组和指针
- C语言结构体里的成员数组和指针
- C语言结构体里的成员数组和指针
- C语言结构体里的成员数组和指针
- tf随笔-6
- Deep Learning(深度学习)学习笔记整理系列之(二)
- 旗子翻转
- 美团codeM预赛B 模
- Android布局优化
- C语言大型项目中那些结构体是如何定下来,操作系统里有些结构体特别复杂,好多指针指向链表,他们如何设计?
- goland IDE golang debug的关键
- 对Akka Future的理解(二)
- adb通过wifi连接android设备(魅族note3)
- 菜鸟请教简单c++舞步学院带你解答
- NAT模式与桥接(bridge)模式
- I/O多路复用select服务器
- 浅谈数据库的分割技术
- [转]TCP报文重组和会话的唯一确定规则