📄 c++.txt
字号:
偺傛偆偵掕媊偝傟偰偄傞丅
側偍丄暥帤'\'傪'/'偵抲姺偟偰偄傞偺偼丄MinGW + MSys偺娐嫬偱巊梡偱偒傞
傛偆偵偡傞偨傔偱偁傞丅
傑偨丄make帪偵岆偭偰crti.o側偳偺僐儞僷僀儖傪帋傒傛偆偲偡傞偙偲傪夞旔
偡傞栚揑偱丄START_OBJS偲END_OBJS乮偍傛傃start.o乯偺make儖乕儖傪摿壔偟
偰偄傞丅
(2) 儕儞僇僗僋儕僾僩偺懳墳
.init傗.fini摍偺ELF宍幃摿桳偺僙僋僔儑儞掕媊偑昁梫偱偁傞丅
6.3 SH偵摿桳偺傕偺
僞乕僎僢僩偑SH偺応崌偵摿桳側梫慺偲偟偰丄埲壓偺傕偺偑偁傞丅
(1) _init娭悢偍傛傃_fini娭悢
GCC偺懡偔偺僞乕僎僢僩偱偼丄ELF宍幃偺応崌丄弶婜壔娭悢偍傛傃廔椆帪娭悢
偲偟偰丄_init娭悢偲_fini娭悢傪巊梡偡傞丅偟偐偟丄SH偺応崌偵偼init娭悢
偲fini娭悢乮愭摢偺壓慄偑側偄乯傪巊梡偟偰偄傞丅偦偺偨傔丄tool_defs.h
偵偍偄偰丄init偍傛傃fini偵偦傟偧傟儅僋儘抲姺偟偰偄傞丅
俈丏傾僾儕働乕僔儑儞嶌惉偵偍偗傞僸儞僩
7.1 惷揑側僆僽僕僃僋僩
惷揑側僆僽僕僃僋僩偼晛捠偵掕媊偡傞偙偲偑偱偒傞偑丄埲壓偺揰偵拲堄偡傞
昁梫偑偁傞丅
(1) 僇乕僱儖旕摦嶌忬懺
僌儘乕僶儖側僐儞僗僩儔僋僞傗僨僗僩儔僋僞偼丄僇乕僱儖旕摦嶌忬懺偱屇弌
偝傟傞丅偟偨偑偭偰丄偙傟傜偺娭悢撪偱偼丄兪ITRON偺僒乕價僗僐乕儖傪屇弌
偡偙偲偼弌棃側偄丅桞堦屇弌偡偙偲偑弌棃傞僒乕價僗僐乕儖偼丄JSP僇乕僱儖
偺撈帺奼挘偱偁傞vsns_ini偩偗偱偁傞丅
僋儔僗傪僌儘乕僶儖偱傕儘乕僇儖偱傕巊偊傞傛偆偵偡傞偵偼丄昁梫偵墳偠偰丄
vsns_ini偱僇乕僱儖偺摦嶌忬懺傪敾暿偟丄忬懺偵墳偠偰張棟傪暘偗傞昁梫偑
偁傞丅
(2) 娭悢撪偺惷揑僆僽僕僃僋僩
娭悢撪偱掕媊偝傟偨惷揑僆僽僕僃僋僩偺僐儞僗僩儔僋僞偼丄昁偢偟傕婲摦帪
偵屇弌偝傟傞栿偱偼側偔丄幚峴僷僗偑嵟弶偵偦偺僆僽僕僃僋僩偺掕媊売強偵
嵎妡偐偭偨帪揰偱屇弌偝傟傞丅
偟偨偑偭偰丄僐儞僗僩儔僋僞偑僇乕僱儖摦嶌忬懺偱屇弌偝傟傞偐丄旕摦嶌忬
懺偱屇弌偝傟傞偐偼丄偦偺僆僽僕僃僋僩偑掕媊偝傟偨娭悢偑嵟弶偵屇弌偝傟
傞僞僀儈儞僌偵埶懚偡傞丅
堦斒揑偵丄偙偺栤戣傪夞旔偡傞偵偼Double-Checked Locking偲屇偽傟傞庤朄
偑梡偄傜傟傞丅
class foo
{
// 僋儔僗掕媊
};
void func()
{
static foo* ptr = 0;
if (ptr == 0)
{
wai_sem(SEMID);
if (ptr == 0)
{
static foo x;
ptr = &x;
}
sig_sem(SEMID);
}
// 娭悢杮懱偺張棟
}
(3) 僔僗僥儉儘僌偺巊梡
僨僗僩儔僋僞偱偼丄僔僗僥儉儘僌傪惂尷側偔巊梡偡傞偙偲偑偱偒傞偑丄僌儘
乕僶儖側僐儞僗僩儔僋僞偱偼丄僨僼僅儖僩偱偼僔僗僥儉儘僌傪巊梡偡傞偙偲
偑偱偒側偄丅
7.2 new墘嶼巕偲delete墘嶼巕
(1) 攔懠惂屼偵偮偄偰
new墘嶼巕偲delete墘嶼巕偼丄張棟懍搙傪岦忋偡傞偨傔丄僼儕乕僗僩傾偐傜偺
儊儌儕妱晅偗乮std::malloc娭悢傪梡偄偰幚憰乯偼僨傿僗僷僢僠嬛巭忬懺偱峴
偭偰偄傞丅
傾僾儕働乕僔儑儞偺梫媮偵傛偭偰丄懠偺曽朄偱攔懠惂屼傪峴偆昁梫偑偁傞応
崌偵偼丄systask/cxxrt.c偺拞偺__malloc_lock娭悢偲__malloc_unlock娭悢傪
僇僗僞儅僀僘偡傟偽傛偄丅
(2) 巊梡偵娭偡傞惂栺
旕僞僗僋僐儞僥僉僗僩傗僞僗僋椺奜張棟儖乕僠儞偱屇弌偡偙偲偼偱偒側偄丅
僇乕僱儖旕摦嶌忬懺乮vsns_ini娭悢偑TRUE傪曉偡婜娫乯偱偼丄捠忢捠傝巊梡
偡傞偙偲偑偱偒傞丅
(3) 僆乕僶乕儘乕僪偵偮偄偰
僌儘乕僶儖側new墘嶼巕偲delete墘嶼巕偼丄幚峴岠棪偼傑偢傑偢偱偁傞偑丄嬻
娫岠棪偼寛偟偰崅偄偲偼偄偊側偄丅傑偨丄摿掕偺僋儔僗偺嵟掅惗惉悢偵偮偄
偰傕昡壙偟偵偔偄偨傔丄尩枾側摦嶌曐徹傪昁梫偲偡傞僋儔僗偵娭偟偰偼丄new
墘嶼巕偲delete墘嶼巕傪僆乕僶乕儘乕僪偡傞偙偲傪悇彠偡傞丅
僆乕僶乕儘乕僪偵嵺偟偰偼丄屌掕挿儊儌儕僾乕儖摍傪梡偄傞偙偲偑弌棃傞丅
椺偊偽丄埲壓偺傛偆偵僋儔僗傪掕媊偡傞偙偲偑弌棃傞丅
#include <t_services.h>
#include <cstddef>
#include "kernel_id.h"
class foo
{
static ID mpfid_;
public:
static void* operator new(std::size_t size) throw()
{
VP ptr;
get_mpf(mpfid_, &ptr);
assert(ptr != 0);
return ptr;
}
static void operator delete(void* ptr) throw()
{
rel_mpf(mpfid_, ptr);
}
};
static ID foo::mpfid_ = FOO_MPF; // 屌掕挿儊儌儕僾乕儖偺ID斣崋
傑偨丄new墘嶼巕偺攝抲峔暥傪巊梡偡傞偙偲偱丄僞僀儉傾僂僩巜掕摍偺婡擻傪
捛壛偡傞偙偲傕壜擻偱偁傞丅
static void* operator new(std::size_t size, TMO tmout);
static void operator delete(void* ptr, TMO) throw();
側偍丄new墘嶼巕傪僆乕僶乕儘乕僪偡傞応崌丄昁偢懳墳偡傞delete墘嶼巕傕崌
傢偣偰僆乕僶乕儘乕僪偟側偗傟偽側傜側偄丅
忋婰偺応崌丄delete墘嶼巕偱TMO宆偺堷悢傪巊梡偡傞偙偲偼側偄偑丄new偝傟
偨僋儔僗偺僐儞僗僩儔僋僞偐傜椺奜偑僗儘乕偝傟偨応崌乮new墘嶼巕偦偺傕偺
偱偼側偄乯丄懳墳偡傞delete墘嶼巕偑昁梫偵側傞丅
7.3 椺奜張棟
(1) 椺奜張棟偺撪晹張棟
GCC偱偼丄configure帪偵--enable-sjlj-exceptions傪巜掕偟偨応崌丄椺奜張
棟傪幚尰偡傞偨傔偵setjmp偍傛傃longjmp娭悢傪巊梡偟偰偄傞丅僞乕僎僢僩偵
傛偭偰偼懠偺幚尰曽朄傪慖戰偡傞偙偲傕偱偒傞偑丄摦嶌妋擣偼峴偭偰偄側偄丅
椺奜傪T宆偺僆僽僕僃僋僩傪throw偟偨応崌丄撪晹揑偵偼埲壓偺弴彉偱張棟偑
峴傢傟傞丅
1) std::malloc娭悢偵傛傝丄T宆偺僆僽僕僃僋僩傪奿擺壜擻側儊儌儕僽儘
僢僋偑妱晅偗傜傟傞丅
妱晅偗偵幐攕偟偨応崌丄嬞媫梡偺惷揑側僶僢僼傽偑摉偰傜傟傞丅
2) T宆偺僐僺乕僐儞僗僩儔僋僞偑屇弌偝傟丄throw偝傟偨僆僽僕僃僋僩偺
僐僺乕偑丄1)偱妱晅偗偨僽儘僢僋傪梡偄偰惗惉偝傟傞丅
僐僺乕僐儞僗僩儔僋僞撪偱椺奜偑throw偝傟偨応崌偼std::terminate
娭悢偑屇弌偝傟偨屻丄std::abort娭悢偵傛傝堎忢廔椆偡傞丅
3) 椺奜張棟僼儗乕儉傪専嶕偟丄catch偝傟傞傑偱偺宱楬偵懚嵼偡傞儘乕
僇儖側僆僽僕僃僋僩偺僨僗僩儔僋僞偑屇弌偝傟傞丅
偙偙偱丄僨僗僩儔僋僞撪偱椺奜偑throw偝傟偨応崌偼std::terminate
娭悢偑屇弌偝傟偨屻丄std::abort娭悢偵傛傝堎忢廔椆偡傞丅
4) T宆乮傑偨偼偦偺婎掙僋儔僗乯偵懳墳偡傞catch僽儘僢僋偑尒偮偐偭偨
応崌偼丄偦偺僽儘僢僋偵峀堟暘婒偡傞丅catch僽儘僢僋偺僷儔儊乕僞
偑抣搉偟偺応崌丄僐僺乕僐儞僗僩儔僋僞偵傛偭偰怴偟偄儘乕僇儖側僆
僽僕僃僋僩偑惗惉偝傟傞丅
懳墳偡傞catch僽儘僢僋偑尒偮偐傜側偐偭偨応崌傗抣搉偟偺嵺偵椺奜
偑throw偝傟偨応崌偼std::terminate娭悢偑屇弌偝傟偨屻丄std::abort
娭悢偵傛傝堎忢廔椆偡傞丅
5) catch僽儘僢僋撪偺張棟偑幚峴偝傟傞丅
6) 忋婰2)偱惗惉偝傟偨僆僽僕僃僋僩偺僨僗僩儔僋僞偑屇弌偝傟傞丅
(2) 僞僗僋嵞婲摦帪偺弶婜壔
JSP 1.4偱偼嵞婲摦帪偺弶婜壔張棟偲偟偰_toppers_cxxrt_reset_specific娭
悢傪屇傃弌偡昁梫偑偁偭偨偑丄JSP 1.4.1偱偼_toppers_cxxrt_reset_specific
娭悢偺屇傃弌偟偼昁梫偲偟側偄丅
偦偺戙傢傝丄僞僗僋偺僄儞僩儕娭悢偐傜椺奜偑摦嶌偟偨応崌偺摦嶌偼枹掕媊
偱偁傞丅
(3) 岠棪偺岦忋
configure帪偵--enable-sjlj-exceptions傪巜掕偟偨応崌丄椺奜傪throw偟側
偄応崌偱傕丄庒姳偺幚峴岠棪偺掅壓偑婲偙傞丅傑偨丄嬻娫岠棪偑挊偟偔掅壓
偡傞応崌偑偁傞丅
岠棪傪彮偟偱傕夵慞偡傞偵偼丄埲壓偺曽朄偑桳岠偱偁傞丅
1) 偱偒傞偩偗僀儞儔僀儞娭悢傪巊梡偡傞丅椺奜張棟偵娭偡傞僆乕僶乕僿
僢僪偺懡偔偼丄娭悢偺屇弌偟偵晅悘偟偰敪惗偡傞丅
2) 寛偟偰椺奜傪敪惗偟側偄娭悢偵偼丄昁偢椺奜巜掕throw()傪晅壛偡傞丅
摿偵丄C尵岅偱幚憰偝傟偨娭悢偼丄昁偢throw()傪晅偗傞偙偲丅
3) 椺奜偑敪惗偡傞偐傕偟傟側偄娭悢偵偼椺奜巜掕傪晅偗側偄丅
椺奜巜掕傪晅偗傞偲僼傿儖僞儕儞僌張棟偑埫栙揑偵揥奐偝傟傞丅
4) 壜擻側尷傝僨僗僩儔僋僞傪掕媊偟側偄丅
娭悢撪偱僨僗僩儔僋僞傪帩偮儘乕僇儖側僆僽僕僃僋僩傪巊傢側偗傟偽丄
椺奜傪throw偡傞偐傕偟傟側偄娭悢傪屇傫偱傕丄僆乕僶乕僿僢僪偵側
傜側偄応崌偑偁傞丅
5) 堦帪僆僽僕僃僋僩偺惗惉傪旔偗傞
堦帪僆僽僕僃僋僩惗惉偼偦傟帺懱偑僆乕僶乕僿僢僪偱偁傞偩偗偱側偔丄
僐儞僗僩儔僋僞偱椺奜偑敪惗偡傞婡夛傪嶌傝丄傑偨僨僗僩儔僋僞偑屇
傃弌偝傟傞婡夛傪憹傗偡丅
7.4 C尵岅偲偺崿嵼
C++偐傜C尵岅偱掕媊偟偨娭悢傪屇弌偡応崌丄extern "C"偵傛傝"C"儕儞働乕僕
偱偁傞偙偲傪柧帵揑偵巜掕偟側偗傟偽側傜側偄丅
extern "C" int foo();
extern "C" {
void hoge();
void bar();
}
傑偨丄C尵岅偐傜屇弌偡壜擻惈偺偁傞娭悢傪C++偱掕媊偡傞応崌傕extern "C"
傪娭悢掕媊偵晅壛偡傞昁梫偑偁傞丅
C偲C++偱偼屳姺惈偺側偄宆傕偁傞偨傔丄椉曽偐傜巊梡偡傞娭悢偵丄偦偆偟偨
宆傪巊梡偡傋偒偱偼側偄丅椺偊偽丄bool傗僋儔僗宆側偳偱偁傞丅
摿偵丄kernel_cfg.c偼C尵岅偱偁傞偨傔丄僞僗僋摍偺奼挘忣曬偵僋儔僗偺億僀
儞僞傪巜掕偡傞偙偲偼偱偒側偄丅
C娭悢偐傜C++娭悢偺屇弌偟偼丄尨懃偲偟偰峴偆傋偒偱偼側偄丅撪晹偱椺奜偑
敪惗偟偨応崌丄摦嶌偑曐徹偱偒側偄偺偑偦偺棟桼偱偁傞丅
捠忢偺屇弌偟偺懠丄僐乕儖僶僢僋娭悢傪梡偄傞応崌傕椺奜偱偼側偄丅
C++娭悢偐傜C娭悢傪屇弌偡応崌丄C娭悢偵偼椺奜巜掕throw()傪晅壛偡傋偒偱
偁傞丅偙偆偡傞偙偲偱戝暆偵岠棪偺岦忋偑婜懸偱偒傞丅
埲忋
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -