13运行库实现
第十三章 運行庫實現<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
?
1????C語言庫 基本功能及原則 (1)?????? 具有自己的入口???????? mini_crt_entry (2)?????? 進程退出函數???????????? exit (3)?????? 堆操作?????????????????????????? malloc (4)?????? 文件操作?????????????????????? fopen? fread? fwrite? fclose? fseek (5)?????? 格式化字符串和輸出操作? printf? sprint (6)?????? 注冊函數?????????????????????? atexit?
入口函數 Void mini_crt_entry(void) { ?????????? 1? 獲得argc和argv; ?????????? 2? 堆初始化; ?????????? 3? IO初始化; ?????????? 3.5 do_global_ctors();?????????????? //構造函數 ?????????? 4? main(argc, argv); ?????????? 5? exit(); }?
堆的實現 實現系統調用brk,在堆初始化是申請固定的空間,用鏈表形式管理。每個節點都有一個頭。并實現malloc和free函數?
IO與文件操作 各個文件操作都是對系統調用的簡單封裝?
字符串相關操作 格式化字符串 printf?
2????如何使用Mini CRT $gcc? -c????? -fno-builtin??????? -fnostdlib????????? -fno-stack-protector???????? \ ?????????? entry.c????? malloc.c?? stdio.c????? string.c??? printf.c $ar??? -rs??? minicrt.a ?????????? malloc.o?? printf.o???? stdio.o????? string.o? (entry.o)?
$gcc? -c????? –ggdb?????? -fno-builtin??????? -fnostdlib????????? -fno-stack-protector???????? test.c $ld???? -static?????? -e????? mini_crt_entry???????? entry.o???? test.o?????? minicrt.a? -o????? test?
3????C++運行庫 一般C++運行庫都是依賴于C運行庫的,它們僅僅包含C++的一些特性支持。 new與delete 支持利用C庫的堆操作實現?
C++全局構造與析構 構造函數主要實現的的是依靠特殊的段合并后形成構造函數數組,而析構函數則依賴atexit函數。 由于Linux的全局構造還需要crtbegin和crtend兩個部分,所以也需要crtbegin.cpp和crtend.cpp兩個文件。 析構部分則需要實現atexit函數,并在exit函數中實現析構。?
stream和string?
4????如何使用C++運行庫轉載于:https://blog.51cto.com/lindo/386449
總結
- 上一篇: 从Google PR值审定标准来学习如何
- 下一篇: 疯狂的程序员-第三章