電腦小知識:Windows 10是用什麼語言寫的?到底有多少行代碼?

来源:https://www.cnblogs.com/yxy6/archive/2020/04/24/12767911.html
-Advertisement-
Play Games

這是微軟的內核工程師 Axel Rietschin在Quora的一個回答。 Windows 10 的code base 和Windows 8.x , 7 , Vista , XP , 2000 和Windows NT的code base 是相同的,當然是演化過來的,其中的每一代都進行了重大的重構,增 ...


這是微軟的內核工程師 Axel Rietschin在Quora的一個回答。

Windows 10 的code base 和Windows 8.x , 7 , Vista , XP , 2000 和Windows NT的code base 是相同的,當然是演化過來的,其中的每一代都進行了重大的重構,增加了大量的新功能,提升了性能和對硬體,安全的支持,並且保持了高度的向後相容性。

(註:考慮到Windows的眾多版本和海量應用,這是一個很了不起的成就, 也是一個很大的包袱。)

Windows 的大部分內核(ntoskrnl.exe)是用C語言寫的,你可以在Github上看到泄露的Windows Research Kernel 代碼,自己研究一下,雖然它已經相當過時,非常不完整,但依然能看出一些重要的東西。

代碼庫在這裡:

https://github.com/markjandrews/wrk-v1.2

比如說,我們熟悉的註冊表(Registry),在內核中被稱為配置管理(configuration manager,簡稱cm),就在這個目錄下:wrk-v1.2/base/ntos/config

(註:Windows Research Kernel是微軟為教育目的提供的源代碼。高校師生可以修改,編譯,以此來學習OS的原理。在Linux大行其道的時候, 不知道有多少高校在用?)

大部分運行在內核態的代碼都是用C語言寫的,包括大部分的文件系統, 網路,大部分的驅動, 其中也有一些C++。

如果往上走進入到用戶態,C語言就會變少,C++會逐漸增多。

大多數人都沒有意識到Windows的龐大規模:這是一個真正的史詩般的巨型項目。

在Windows的代碼樹中,有源代碼,測試代碼,還有其他東西(碼農翻身註:可能是圖標,聲音,圖片?),文件數超過400萬,500多G。

僅僅是把這個代碼樹的目錄和文件名都瀏覽一遍,就要花費你一年的時間。這裡有50多萬個文件夾,其中的代碼組成了操作系統工作站和伺服器的所有版本,相關工具,開發工具包。

如果你想把源代碼都讀一遍,可能要窮盡一生。

下麵是一個截圖,描述了Windows源碼的統計信息:

有一次,我有幾周的時間沒有更新我的Git, 等我回來的時候,我發現它已經落後60,000次提交了!

你肯定會說一個人不可能閱讀完每天的代碼提交,更不用說過去三十年積累的代碼了。

如果你看到了Windows 10 “DVD” 並且想知道是什麼編程語言創造了光碟上的東西,我猜98%是C和C++, C是大頭。

.NET BCL(Base Class Library) 和其他庫&框架主要是用C#寫的,他們僅僅是C語言海洋(有一點C++小島)小水滴而已。它們來自不同的部門(The developer’s division), 代碼也不是Windows代碼樹的一部分。

其實做為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這裡我推薦一個C語言C++交流Q群951726787,不管你是小白還是轉行人士歡迎入駐,大家一起交流成長。

微信公眾號:C語言編程學習基地


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在我的 "上一篇文章中" ,我展示瞭如何使用ASP.NET Core創建Quartz.NET托管服務並使用它來按計劃運行後臺任務。不幸的是,由於Quartz.NET API的工作方式,在Quartz作業中使用Scoped依賴項註入服務有些麻煩。說明下這篇文章部分採用機翻。 作者:依樂祝 譯文地址:h ...
  • 來源:https://www.cnblogs.com/savorboard/p/7679902.html 作者:Savorboard 前言 最近很久沒有寫博客了,一方面是因為公司事情最近比較忙,另外一方面是因為在進行 [ CAP ](http://www.cnblogs.com/savorboard ...
  • roundrobin:動態輪詢;支持權重的運行時調整,支持慢啟動,每個後端中最多支持4095個server;什麼意思呢?動態調整權重就是說不重啟服務的情況下調整權重;慢啟動說的是,前端的流量不會一下子全部給打進來,而是一部分一部分的打到後端伺服器上;這樣可以有效防止流量過大時一下子把後端伺服器壓垮... ...
  • 2018年3月,我與張老師就這麼在微信上聊了起來,起初我並沒有寫書的打算,我們之間只是通過討論、交流的形式聊聊關於出書的方方面面。最終,敵不過張老師超強的專業能力、細緻的解說與盛情相邀,我答應張老師寫一本Linux系統運維的圖書並由人郵出版。由此,我踏上了漫漫2年多的寫書之路。 為什麼寫這本書 寫書 ...
  • 背景 By 魯迅 By 高爾基 說明: 1. Kernel版本:4.14 2. ARM64處理器,Contex A53,雙核 3. 使用工具:Source Insight 3.5, Visio 1. 概述 我會假設你已經看過了 "《Linux RCU原理剖析(一) 初窺門徑》" 本文將進一步去探索下 ...
  • 程式和進程式控制制 ps:顯示系統瞬間的進程信息 top:動態監視系統任務工具,輸出結果是連續的 kill:根據PID控制進程 killall:殺死指定名稱進程,可以用來殺死一組進程 nice:允許在預設優先順序基礎上進行增大或減小 renice:改變一個正在運行的進程的neice值 用戶操作: user ...
  • 1. install 2. 啟動台里啟動一下圖標 3. 驗證是否安裝好 在終端輸入 、`docker version`看到列印出來信息就是OK了 ...
  • Vim文本編輯器的使用 Vim的工作模式 1.命令模式 2.輸入模式 3.編輯模式 進入Vim 1.使用Vim打開文件 2.直接進入指定位置 Vim基本命令 1.插入命令 2.游標移動命令 3.使用Vim進行編輯 保存退出命令 Vim的工作模式 命令模式 輸入模式 編輯模式 命令模式 在使用Vim編 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...