V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wxd92
V2EX  ›  C

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

  •  
  •   wxd92 · 2022-01-12 09:02:42 +08:00 via iPhone · 3839 次点击
    这是一个创建于 1046 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    2. 模块化(横向划分)
    比如 HAL ,要支持不同的硬件接口( bus ),要支持不通的通讯协议。不同硬件接口与不同协议支持,就是横向(模块化或插件化)
    xsen
        17
    xsen  
       2022-01-13 06:43:28 +08:00
    如果还是想不明白,不妨没事研究下自己住的小区。从小区区域、栋、楼层、房子、房间、房间内部装修
    当然,还有水电气诸如此类
    bung
        18
    bung  
       2022-01-13 10:22:47 +08:00   ❤️ 1
    http://aosabook.org/en/index.html 可以看看开源软件架构,网页就能看,也有电子书
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2798 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:35 · PVG 10:35 · LAX 18:35 · JFK 21:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.