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