1. 程式人生 > >CRT(C Runtime Library)—— C/C++執行時庫

CRT(C Runtime Library)—— C/C++執行時庫

C runtime library(part of the C standard library)

任何一個 C 程式,它的背後都有一套龐大的程式碼來進行支撐,使得該程式得以執行在更高級別上,而不必擔心同計算機底層操作的細節,這套程式碼至少包括:

  • 入口函式(Linux,_start)
  • 入口函式所依賴的函式構成的函式集合(平臺系統相關);
  • 各種標準庫函式的實現;

這樣的一套程式碼即稱為執行時庫(Runtime Library),C 語言的執行庫,即被稱為 C 執行庫(C Runtime library,CRT)。一般來說,CRT 函式就是標準的 C 語言函式。例如,printf、scanf、strlen、fopen 等函式就屬於 CRT 函式。

linux、windows 的 CRT 原始碼:

  • visual studio,windows 下的 C/C++ IDE,在 VC\crt\src 裡便可找到一份 C 語言執行庫的原始碼。
  • linux,libc

0. CRT 的基本構成

  • 啟動與退出:包括入口函式及入口函式所依賴的其他函式;
  • 標準函式:由 C 語言標準規定的 C 語言標準庫所應當具備的函式實現;
  • I/O:I/O 功能的封裝與實現
  • 堆:堆的封裝與實現
  • 語言實現:

1. windows 下的 CRT 函式

在 windows 下所有的 CRT 函式最終都是轉化成為 win32 API 來執行的。

windows 本身並沒有在核心之上

提供對 CRT 的支援。 CRT 既可以通過靜態連線來實現,也可以通過動態連結來實現(MSVCRT.DLL)。常用的安全 CRT 函式常用的安全 CRT 函式安全 CRT(C Runtime Library = C 執行時間庫)函式,是微軟公司對 C/C++ 語言的擴充套件。

它在原來函式名後添加了“_s”字尾;一般返回出錯程式碼;並將原來的函式返回值,作為一個引數,新增到函式輸入引數列表的最後;對帶緩衝區引數的函式,還添加了表示緩衝區大小的輸入引數,以防止記憶體溢位。

相關推薦

CRTC Runtime Library—— C/C++執行

C runtime library(part of the C standard library) 任何一個 C 程式,它的背後都有一套龐大的程式碼來進行支撐,使得該程式得以執行在更高級別上,而不必擔心同計算機底層操作的細節,這套程式碼至少包括:

C執行C Run-time Library詳解

一、什麼是C執行時庫1)C執行時庫就是 C run-time library,是 C 而非 C++ 語言世界的概念:取這個名字就是因為你的 C 程式執行時需要這些庫中的函式.2)C 語言是所謂的“小核心”語言,就其語言本身來說很小(不多的關鍵字,程式流程控制,資料型別等);所以,C 語言核心開發出來之後,De

直接插入排序高級版C++實現

include ostream 源代碼 cpp -s 臨時 ios 結束 中間變量 直接插入排序(高級版)之C++實現 一、源代碼:InsertSortHigh.cpp 1 /*直接插入排序思想: 2  假設待排序的記錄存放在數組R[1..n]中。初始時,R[1]自成

建立簡單的Hash table哈希表by C language

class truct num span abs arr str log tab 1 #define SIZE 1000 //定義Hash table的初始大小 2 struct HashArray 3 { 4 int key; 5 i

C/C++學習筆記2.C++中vector的使用

alt double space ons 說明 info 部分 所有 con 說明:vector是C++中一個非常方便的容器類,它用於存放類型相同的元素,利用成員函數及相關函數可以方便的對元素進行增加或刪除,排序或逆序等等,下面將對這些功能一一敘述。 一.vector的第一

回溯法八皇后問題C語言實現

       回溯法,又被稱為“試探法”。解決問題時,每進行一步,都是抱著試試看的態度,如果發現當前選擇並不是最好的,或者這麼走下去肯定達不到目標,立刻做回退操作重新選擇。這種走不通就回退再走的方法就是回溯法。 回溯VS遞迴 很多人認為回溯和遞迴是一樣的,其實不然。在回溯

二分+樹形dpwannafly28-C

https://ac.nowcoder.com/acm/contest/217/C msc有n個小寵物,這些寵物的家是連在一起的,更有趣的是,這些寵物的家之間的連線關係形成了一個樹的形態。 每個小寵物的習性是不太一樣的,比如說有的可能吃素,有的可能吃葷。 作為直

希爾排序演算法縮小增量排序C語言實現

希爾排序,又稱“縮小增量排序”,也是插入排序的一種,但是同前面幾種排序演算法比較來看,希爾排序在時間效率上有很大的改進。 在使用直接插入排序演算法時,如果表中的記錄只有個別的是無序的,多數保持有序,這種情況下演算法的效率也會比較高;除此之外,如果需要排序的記錄總量很少,該演算法的效率同樣會很高。希爾排序就是

Microsoft Visual C++ Runtime Library Runtime Error的解決辦法

Microsoft Visual C++ Runtime Library Runtime error! Program:c:/.../Outlook.exe R6025  Pure virtual function call  要解決此問題,請使用以下方法之一。 回到頂端 方法 1:使用命令列開關 使

遊戲程式設計模式Game Programming PatternsC#&Unity練習二:觀察者模式

觀察者模式 核心描述:“在物件間定義一種 一對多的依賴關係,以便當某個物件的情況發生改變時,與它存在依賴關係的所有物件都能收到通知,並自動進行更新。” 知識點: 1.複習了“繼承”和“多型”,包括讓子類以介面的身份進行活動。子類可以直接使用父類的方法。

c語言資料結構應用-陣列佇列無鎖佇列在多執行緒中的使用

一、背景 上篇文章《c語言資料結構實現-陣列佇列/環形佇列》講述了陣列佇列的原理與實現,本文編寫一個雙執行緒進行速度測試 二、相關知識 多執行緒程式設計介面: 1) 建立執行緒 pthread_create 函式 SYNOPSIS #include <

遊戲程式設計模式Game Programming PatternsC#&Unity 練習一:命令模式

本人遊戲策劃一枚,開始學習一下游戲程式設計,以便於將來失業了可以做做獨立遊戲。 命令模式 核心描述: 將一個請求(request)封裝成一個物件,從而允許你使用不同的請求,佇列或者日誌將客戶端引數化,同時支援請求操作的撤銷與恢復。 知識點:

路徑規劃最短路徑演算法C#實現

    ///<summary>/// RoutePlanner 提供圖演算法中常用的路徑規劃功能。     /// 2005.09.06     ///</summary>publicclass RoutePlanner     {         public RoutePlan

C Runtime Library 的來歷

由於我看到的文章也是轉載的且未提供原文連結,所以這裡沒有提供原文連結,深表抱歉!   msvcrt.dll (名稱:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C語言庫函式,並且為使用C/C++(Vc)編繹的程式提供了初始

Linux下如何編譯有多個檔案包括不同目錄下的.c/.h檔案C/C++程式

在Linux下要編譯一個C/C++程式,首先要知道包含目錄的作用,對C/C++有了解的就會知道,#include是包含標頭檔案所用的,也就說說部分類、函式、或者變數宣告就在其中。而#include巨集定義又有兩種: #include""和#include <>

編寫程式實現n階n為奇數魔方(C)

#include <stdio.h>void Init (int square[][20],int n) {int i,j;for (i=1;i<=n;i++){for (j=1;j<=n;j++)square[i-1][j-1]=0;}}void put (int square[][

Qt生成併發布程式在別的機器上執行 發生Microsoft Visual C++ Runtime Library 錯誤

問題簡述 開發所屬系統:window 7 x64 開發IDE 下載     訪問密碼 5460 : 問題: [注意:庫一定要源自自己Qt程式相對編譯器bin目錄下動態庫,不要隨意從網上下載,大多數情況下造成此等錯誤提示,一般由於動態庫

C/C++執行到底在Windows中起什麼作用猜想

以下是作者的一些猜想: 1. 我們在用VC程式設計時,會在執行我們的main函式前,系統先通過Kernel32呼叫一些函式,執行一些C的初始化準備工作,我們一般叫C執行時庫的初始化。那麼這些初始化的作用是什麼?是否是必要的?不知道大家有沒有思考過這個問題。 以下是我對這

Redis原始碼分析三十五--- redis.c服務端的實現分析2

       在Redis服務端的程式碼量真的是比較大,如果一個一個API的學習怎麼實現,無疑是一種效率很低的做法,所以我今天對服務端的實現程式碼的學習,重在他的執行流程上,而對於他的模組設計在上一篇中我已經分析過了,不明白的同學可以接著看上篇。所以我學習分析redis服務

C#自身包含其他應用程式或者檔案並在執行呼叫

       今天一個同事問我,怎麼把Dll動態連結庫直接嵌入到C#開發的應用程式本身,讓C#在釋出出去的時候,只是一個.exe的檔案,而不是一個資料夾。我仔細思索了一下這個問題。發現這個問題其實可以總結為一個比較普遍的問題,那就是怎樣把不同種類的檔案包含到C#開發的應用程式