C 语言,市面上有没有讲软件架构的书

2022-01-12 09:02:42 +08:00
 wxd92

市面上很多介绍语法的书,有没有讲架构的,设计小模块到整体过程的书

3829 次点击
所在节点    C
18 条回复
yolee599
2022-01-12 09:07:45 +08:00
github 上面找一个开源项目,读源码。比如 linux 内核。
Aresrun
2022-01-12 09:09:05 +08:00
凤凰架构?
powerman
2022-01-12 09:20:37 +08:00
啥架构,void * 满天飞 还架构..
nevin47
2022-01-12 09:54:47 +08:00
C 语言的软件设计本质上和通用的软件设计没有太大的区别,所以我觉得看一看设计模式的几本大部头都可以提高 C 语言场景下的设计能力。像 C 语言所缺乏的一些 OOP 特性,也可以通过各种实现来进行补位(例如 QEMU 的 QOM 设计,GCC 的一些特殊编译手段等等)

不过我在工作中发现,很多 C 程序员都忽视了 C 语言相对其他编程语言而言,更加直面内存与硬件这个特质,对计算机本身原理、内存系统的组织还有常用的编译器的一些范式都缺乏理解,这个相对于软件设计能力,对 C 程序员更加重要,也是进阶的一个关键分水岭
coderluan
2022-01-12 10:27:21 +08:00
C 语言面向过程,你非得架构,会发现自己实际上是拿 C 实现 C++的特性,没啥必要,不过你说设计小模块啥的,可以看看《代码大全》。
kirisamemarisas
2022-01-12 11:19:02 +08:00
赞个 4 楼,这方面可以看看 OpenSSL 库对于各个常用密码算法的实现,对于内存的操作以及硬件优化,还有防范一些攻击(如旁路等)的一些做法。C 语言更多的还是面向与硬件,对于字节的操作会更多一些。
wusu
2022-01-12 11:20:55 +08:00
《 C 语言接口与实现:创建可重用软件的技术》
lcj2class
2022-01-12 12:10:58 +08:00
https://book.douban.com/subject/11229717/
这本书可以看看,可以看看周边的一些常用工具。Linux 源码有很多历史包袱,不建议做架构的参考书看。
wxd92
2022-01-12 13:36:04 +08:00
@coderluan 面向过程的架构也可以,我意思是即使是面向过程,各种函数体实现小模块,向上拓展的过程也应该有架构(或者说是经验)可遵循?
junmoxiao
2022-01-12 17:27:00 +08:00
软件架构和语言没关系,可以看看 educative 的 system design 的课
zjsxwc
2022-01-12 17:31:04 +08:00
hhjswf
2022-01-12 18:23:38 +08:00
@nevin47 蛤?我还以为做 c 的对这个特质应该非常了解,不然 c 还有什么存在感
nevin47
2022-01-12 19:57:40 +08:00
@hhjswf #12 然而并不是

例如 __attribute__((constructor)) ,很多天天写 Linux 用户态的同学连这是干嘛的都讲不出来

还有大家天天在用的 malloc 和多线程编程,十个里面九个都说不清楚 ptmalloc2 的大致工作原理
DeWjjj
2022-01-12 22:31:03 +08:00
架构不架构的不知道,但是我知道软件工程 研究者办法这本书读完了。
弄个开发管理流程可以说是轻而易举。
zinwalin
2022-01-13 00:16:28 +08:00
我的理解是你需要把某一个方向的标准或协议搞清楚了,才有可能谈架构,比如蓝牙通信,如果你不能整体把握蓝牙的脉络,是做不出好的架构的,太多细节和规范了。
xsen
2022-01-13 06:39:59 +08:00
架构跟语言没有关系;楼上 N 多人过于纠细节,只见树木不见森林;简单来说就是分层+模块化;一般分层是纵向划分,模块化是横向。
说白了就是要拆。解耦很重要,所以不同系统、服务、模块之间,要增加接口进行隔离;接口要定义清晰

1. 分层(纵向划分)
比如对于 C 来说,因为会涉及硬件,所以一般是。当然,也可以对于某一层或某一模块,也可以根据需要进一步划分
业务 <-> 业务接口 <-> HAL (硬件抽象层)<-> 硬件驱动

2. 模块化(横向划分)
比如 HAL ,要支持不同的硬件接口( bus ),要支持不通的通讯协议。不同硬件接口与不同协议支持,就是横向(模块化或插件化)
xsen
2022-01-13 06:43:28 +08:00
如果还是想不明白,不妨没事研究下自己住的小区。从小区区域、栋、楼层、房子、房间、房间内部装修
当然,还有水电气诸如此类
bung
2022-01-13 10:22:47 +08:00
http://aosabook.org/en/index.html 可以看看开源软件架构,网页就能看,也有电子书

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/827718

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX