市面上很多介绍语法的书,有没有讲架构的,设计小模块到整体过程的书
1
yolee599 2022-01-12 09:07:45 +08:00
github 上面找一个开源项目,读源码。比如 linux 内核。
|
2
Aresrun 2022-01-12 09:09:05 +08:00
凤凰架构?
|
3
powerman 2022-01-12 09:20:37 +08:00
啥架构,void * 满天飞 还架构..
|
4
nevin47 2022-01-12 09:54:47 +08:00 6
C 语言的软件设计本质上和通用的软件设计没有太大的区别,所以我觉得看一看设计模式的几本大部头都可以提高 C 语言场景下的设计能力。像 C 语言所缺乏的一些 OOP 特性,也可以通过各种实现来进行补位(例如 QEMU 的 QOM 设计,GCC 的一些特殊编译手段等等)
不过我在工作中发现,很多 C 程序员都忽视了 C 语言相对其他编程语言而言,更加直面内存与硬件这个特质,对计算机本身原理、内存系统的组织还有常用的编译器的一些范式都缺乏理解,这个相对于软件设计能力,对 C 程序员更加重要,也是进阶的一个关键分水岭 |
5
coderluan 2022-01-12 10:27:21 +08:00
C 语言面向过程,你非得架构,会发现自己实际上是拿 C 实现 C++的特性,没啥必要,不过你说设计小模块啥的,可以看看《代码大全》。
|
6
kirisamemarisas 2022-01-12 11:19:02 +08:00 1
赞个 4 楼,这方面可以看看 OpenSSL 库对于各个常用密码算法的实现,对于内存的操作以及硬件优化,还有防范一些攻击(如旁路等)的一些做法。C 语言更多的还是面向与硬件,对于字节的操作会更多一些。
|
7
wusu 2022-01-12 11:20:55 +08:00
《 C 语言接口与实现:创建可重用软件的技术》
|
8
lcj2class 2022-01-12 12:10:58 +08:00
https://book.douban.com/subject/11229717/
这本书可以看看,可以看看周边的一些常用工具。Linux 源码有很多历史包袱,不建议做架构的参考书看。 |
9
wxd92 OP @coderluan 面向过程的架构也可以,我意思是即使是面向过程,各种函数体实现小模块,向上拓展的过程也应该有架构(或者说是经验)可遵循?
|
10
junmoxiao 2022-01-12 17:27:00 +08:00
软件架构和语言没关系,可以看看 educative 的 system design 的课
|
11
zjsxwc 2022-01-12 17:31:04 +08:00 via Android
|
13
nevin47 2022-01-12 19:57:40 +08:00
@hhjswf #12 然而并不是
例如 __attribute__((constructor)) ,很多天天写 Linux 用户态的同学连这是干嘛的都讲不出来 还有大家天天在用的 malloc 和多线程编程,十个里面九个都说不清楚 ptmalloc2 的大致工作原理 |
14
DeWjjj 2022-01-12 22:31:03 +08:00
架构不架构的不知道,但是我知道软件工程 研究者办法这本书读完了。
弄个开发管理流程可以说是轻而易举。 |
15
zinwalin 2022-01-13 00:16:28 +08:00
我的理解是你需要把某一个方向的标准或协议搞清楚了,才有可能谈架构,比如蓝牙通信,如果你不能整体把握蓝牙的脉络,是做不出好的架构的,太多细节和规范了。
|
16
xsen 2022-01-13 06:39:59 +08:00 1
架构跟语言没有关系;楼上 N 多人过于纠细节,只见树木不见森林;简单来说就是分层+模块化;一般分层是纵向划分,模块化是横向。
说白了就是要拆。解耦很重要,所以不同系统、服务、模块之间,要增加接口进行隔离;接口要定义清晰 1. 分层(纵向划分) 比如对于 C 来说,因为会涉及硬件,所以一般是。当然,也可以对于某一层或某一模块,也可以根据需要进一步划分 业务 <-> 业务接口 <-> HAL (硬件抽象层)<-> 硬件驱动 2. 模块化(横向划分) 比如 HAL ,要支持不同的硬件接口( bus ),要支持不通的通讯协议。不同硬件接口与不同协议支持,就是横向(模块化或插件化) |
17
xsen 2022-01-13 06:43:28 +08:00
如果还是想不明白,不妨没事研究下自己住的小区。从小区区域、栋、楼层、房子、房间、房间内部装修
当然,还有水电气诸如此类 |
18
bung 2022-01-13 10:22:47 +08:00 1
http://aosabook.org/en/index.html 可以看看开源软件架构,网页就能看,也有电子书
|