锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#include <iostream>
#include <fcntl.h>
using namespace std;
int main()
{
int fd = open("demo.txt", O_RDWR, 0);
close(fd);
int fd1 = open("demo1.txt", O_RDWR, 0);
char *szMsg = "hello";
int size = write(fd, szMsg, strlen(szMsg)+1);
if (-1 == size)
{
cerr << "error!" << endl;
}
close(fd1);
return 0;
}鐚滀竴涓嬩笂闈㈢▼搴忕殑鎵ц緇撴灉銆?br />鍦╳rite鏃訛紝fd鍜宖d1鐨勫兼槸涓鏍風殑錛寃rite fd鏃訛紝瀹為檯灝辨槸write fd1銆?br />涓轟簡閬垮厤鑷繁鍦ㄧ▼搴忎腑璇搷浣滐紝鍙互鍦╟lose(fd)涔嬪悗錛屽姞涓奻d = -1;
unsigned long long ntohll(unsigned long long val)
{
if (__BYTE_ORDER == __LITTLE_ENDIAN)
{
return (((unsigned long long )htonl((int)((val << 32) >> 32))) << 32) | (unsigned int)htonl((int)(val >> 32));
}
else if (__BYTE_ORDER == __BIG_ENDIAN)
{
return val;
}
}
unsigned long long htonll(unsigned long long val)
{
if (__BYTE_ORDER == __LITTLE_ENDIAN)
{
return (((unsigned long long )htonl((int)((val << 32) >> 32))) << 32) | (unsigned int)htonl((int)(val >> 32));
}
else if (__BYTE_ORDER == __BIG_ENDIAN)
{
return val;
}
}
| [鏂囩珷] 鏈夊叧char鎸囬拡鐨勬枃绔犱竴綃?/strong> |
|
浣滆?/strong>錛氭湭鐭?span class=Apple-converted-space> 鏉ユ簮錛氭湀鍏夎蔣浠剁珯 鍔犲叆鏃墮棿錛?005-2-28銆鏈堝厜杞歡绔?/p> |
| [鏂囩珷] 鏈夊叧char鎸囬拡鐨勬枃绔犱竴綃囷紙杞嚜:http://www.moon-soft.com/doc/9040.htm) 鍏堢湅浠ヤ笅浠g爜: PHP婧愮爜: 鐪嬪嚭宸埆浜嗗悧錛熶笂涓孌礎SM鐢╫ffset鍙?abc"鐨勫湴鍧錛岀劧鍚庤祴緇橻ebp-4]錛屼篃灝辨槸p錛堜笅鍚岋級銆?span class=Apple-converted-space> 鑰屼笅涓孌礎SM鍗磋漿浜嗕竴涓集錛屽厛鎶?abc"鐨勫湴鍧杞埌瀵勫瓨鍣╡ax錛岀劧鍚庡啀杞祴緇檖銆?span class=Apple-converted-space> 鏈夌枒闂簡錛氫負浠涔堜笉鍜屼笂闈㈢殑涓鏍鳳紝鐩存帴鐢╫ffset錛烿C鏄緢鑱槑鐨勶紙搴熻瘽錛孧$鐨勪笢瑗垮憖錛夛紝涓嶇敤offset錛屾亹鎬曞氨鏄敤涓嶄簡浜嗐?span class=Apple-converted-space> offset鏄竴鏉′吉鎸囦護錛屽湪緙栬瘧鐨勬椂鍊欏氨宸茬粡鎶婂亸縐婚噺綆楀ソ浜嗐俹ffset鏄棤娉曟墽琛岄棿鎺ュ鍧鐨勮綆楃殑銆?span class=Apple-converted-space> 璇存槑浜嗕粈涔堬紵 const char *p="abc"涓殑"abc"錛屽湪緙栬瘧鏈熼棿灝卞凡緇忓鐞嗗ソ錛岃浜嗕竴鍧楀唴瀛橈紝瀛樿搗鏉ヤ簡錛佸湪鎶婂湴鍧璧嬬粰p鐨勬椂鍊欙紝灝卞彲浠ョ洿鎺ョ敤offset璁$畻銆?span class=Apple-converted-space> 鑰宑har p[]="abc"涓殑"abc"錛屾槸鍦ㄨ繍琛屾湡闂村姩鎬佸垎閰嶅唴瀛樼粰"abc"錛岀劧鍚庡啀綆楀嚭鍦板潃錛岃祴緇檖銆俬ehe錛岃繖鍚屾椂涔熻鏄庝簡鏁扮粍鍜屾寚閽堢殑絳変環(huán)鎬с?span class=Apple-converted-space> 鎴戜滑鍐嶅仛涓嬈″疄楠岋紝榪欎竴嬈℃垜浠妸char p[]="abc"鏀懼湪main()澶栵紝騫跺湪main()鍐呯敤涓涓寚閽堝啀鎸囧悜p鐪嬬湅銆?span class=Apple-converted-space> PHP婧愮爜: 榪欏洖p[]鐨勫0鏄庢斁鍦╩ain()澶栵紝鍙樻垚浜嗗叏灞鍙橀噺銆傜粨鏋渕ain()鍐呯殑t鍙杙鐨勬寚閽堢殑鏃跺欙紝鐩存帴鐢╫ffset鍙互璁$畻鍑烘潵銆?span class=Apple-converted-space> 鎹皬鐭沖ご鎵璇達紝瀛楅潰鍊鹼紝const錛宻tatic錛宨nline錛屽叏灞鍙橀噺閮芥槸鏀懼湪闈欐佹暟鎹尯鐨勩傦紙浣嗘垜鎰熻浼間箮涓嶆槸濡傛錛屽彧鏄叏灞鍙橀噺鍜屽瓧絎︿覆鍦ㄧ紪璇戞椂灝卞鐞嗗ソ鏀懼湪涓璧鳳級 涓嶉毦鍙戠幇錛宲[]琚0鏄庢垚鍏ㄥ眬鍙橀噺鍚庯紝灝卞彲浠ョ洿鎺ョ敤offset璁$畻鍦板潃錛岃鏄庨潤鎬佹暟鎹尯鏄紪璇戞椂灝卞凡緇忓鐞嗗ソ鐨勩?br>鍐嶅鐓onst char *p="abc"鐨凙SM錛屾垜浠┈涓婃兂鍒幫細"abc"灝辨槸琚獵/C++瀛樺湪闈欐佹暟鎹尯涓殑錛佸畠鐨勫湴鍧灝辨槸"abc"鍦ㄩ潤鎬佹暟鎹尯鐨勫湴鍧錛?span class=Apple-converted-space> 寮勬竻浜嗚繖涓紝鏈変簺闂涔熷氨鍙互鎯沖緱閫氫簡銆備笅闈㈣繖縐嶇敤娉曪紝鐪嬫潵涓嶈兘璇存槸閿欒鐨勪簡錛屽洜涓?abc"鏄湪闈欐佹暟鎹尯鐨勶紝鐢熷瓨鏈熷彲浠ヨ鏄暣涓▼搴忥細 PHP婧愮爜: 鐪婣SM錛?span class=Apple-converted-space> PHP婧愮爜: 涓鏍蜂篃鏄嬌鐢╫ffset璁$畻鍦板潃銆?span class=Apple-converted-space> C/C++緇欏瓧絎︿覆鐨勫緟閬囩湡鏄お濂戒簡銆備負浜嗕竴涓瓧絎︿覆錛屽嚑涔庡彲浠ユ墦鐮存墍鏈夌殑鎸囬拡瑙勫垯銆傛檿锝烇綖锝烇綖錛堝畬錛?span class=Apple-converted-space> 闄勶細絎竴嬈″啓榪欎箞闀跨殑鏂囩珷錛屽啓寰楁尯鏅曠殑銆傛湰鏉ユ垜鐨凜/C++涔熶笉鏄緢綰啛鐨勶紝ASM涔熸槸涓鐭ュ崐瑙o紝浠婂ぉ鍦–SDN涓婁負榪欎釜闂閮侀椃浜嗗崐澶╋紝鍜屽嚑涓漢璁ㄨ浜嗕竴涓嬶紝鏈鍚庡氨鍐欎簡榪欎箞涓綃囨枃绔犮傚笇鏈涘ぇ瀹惰祻鑴哥湅鐪嬶綖锝烇綖鏈夐敊涓瀹氳鎸囨鍟婏紒鏈鍚庣壒鍒劅璋㈠皬鐭沖ご錛堟兂椋炵殑鑿滈笩錛岄獎鍌茬殑鐭沖ご錛岃彍鑿滐紝閮芥槸浠栧挴錛夛紝榪樻湁灝忛樋鍝ワ紙灝辨槸Kingzeus鍜級鐨勫府蹇欙綖锝烇綖锝烇綖锝炶阿璋㈠挴锝烇綖锝烇綖锝烇綖
__________________ 楠勫偛鐨勭煶澶村洖澶嶏細 鍫嗗嚑鐩樼Н鏈紝蹇冩儏濂戒簺浜嗭紝鎵浠ュ啀閲嶆柊鍐欎竴閬嶃?span class=Apple-converted-space> PHP婧愮爜:
PHP婧愮爜:
PHP婧愮爜:
__________________ |
class Test
{
public:
int a;
int b;
void print();
void s();
void ss();
void fs();
};
void Test::print()
{
//cout << "hello" << endl;
}
void Test::s()
{
}
void Test::ss()
{
}
void Test::fs()
{
}
void f()
{
int s = 3;
cout << "&s" << &s << endl;
cout << "f" << endl;
}
class B:Test
{
};
int main()
{
Test t;
cout << sizeof(t) << endl;
cout << &t.a << endl;
cout << &t.b << endl;
Test tt;
cout << &tt.a << endl;
cout << &tt.b << endl;
typedef void (Test::*p)(void);
////Test t;
////t.print();
p fun = &Test::print;
printf("%p\n",fun);
fun = &Test::s;
printf("%p\n",fun);
fun = &Test::ss;
printf("%p\n",fun);
fun = &Test::fs;
printf("%p\n",fun);
f();
cout << "--------" << endl;
B b;
cout << sizeof(b) << endl;
////((Test::*print)fun)();
//Test *p4;
//fun(p4);
// Test t;
// (t.*fun)();
// Test d;
// (d.*fun)();
}
綾葷殑鎴愬憳鍑芥暟涓嶆槸鍦ㄧ被瀹炰緥鍖栫殑鏃跺欒澆鍏ュ唴瀛樼殑銆傚簲璇ユ槸緙栬瘧閾炬帴鐨勬椂鍊欏氨鍦ㄧ▼搴忔枃浠朵腑紜畾浜嗙浉瀵瑰湴鍧銆傜劧鍚庣▼搴忚澆鍏ョ殑鏃跺欙紝鎵鏈夌殑鍑芥暟閮借澆鍏ュ埌鍐呭瓨鐨勪唬鐮佸尯銆傛墍浠ュ疄渚嬪寲瀵硅薄鐨勬椂鍊欙紝鍙槸鐢寵浜嗗璞$殑鎴愬憳鍙橀噺鐨勫湴鍧錛屾垚鍛樺嚱鏁板浜庢墍鏈夌殑綾誨璞℃潵璇達紝搴旇鍙湁涓浠斤紝鍦ㄤ唬鐮佸尯鍏辯敤銆傝屼笖綾葷殑鎴愬憳鍙橀噺鍜屾垚鍛樺嚱鏁頒笉鏄瓨鏀懼湪涓璧鳳紙鍦板潃涓嶆槸榪炵畫鐨勶紝鏄垎寮瀛樻斁鐨勶級
Test綾諱腑鐨刟,b鍙橀噺鍦板潃鏄繛緇殑錛屾瘡涓崰4瀛楄妭銆備絾鏄痵(),ss(),fs()涓嶆槸鍜宎,b榪炵畫鐨勶紝鑰屼笖錛岃繖浜涘嚱鏁頒箣闂達紝濂藉儚涔熷茍涓嶆槸涓ユ牸榪炵畫鐨勶紝鏀逛竴涓嬪嚱鏁板悕錛屽湴鍧鏈夊彲鑳戒細鍙樺寲
public class Singleton
{
protected Singleton() { }
private static volatile Singleton instance = null;
/// Lazy鏂瑰紡鍒涘緩鍞竴瀹炰緥鐨勮繃紼?br> public static Singleton Instance()
{
if (instance == null) // 澶栧眰if
lock (typeof(Singleton)) // 澶氱嚎紼嬩腑鍏變韓璧勬簮鍚屾
if (instance == null) // 鍐呭眰if
instance = new Singleton();
return instance;
}
}
榪欏簲璇ユ槸姣旇緝緇忓吀鐨勭嚎紼嬪畨鍏ㄧ殑Singleton鍒涘緩鏂瑰紡錛屼絾鏄繕鏄竴涓洿鍔犵畝鍗曚篃寰圕ool鐨勭嚎紼嬪畨鍏ㄧ殑Singleton錛?/p>
class Singleton
{
private Singleton() { }
public static readonly Singleton Instance = new Singleton();
}
銆銆瀹冪渷鍘諱簡涓婇潰紺轟緥涓偅涓猯aze鏋勯犺繃紼嬶紝鐢變簬Instance鏄被鐨勫叕鍏遍潤鎬佹垚鍛橈紝鍥犳鐩稿綋浜庡畠浼氬湪綾葷涓嬈¤鐢ㄥ埌鐨勬椂鍊欒鏋勯狅紝鍚屾牱鐨勫師鍥犱篃灝卞彲浠ョ渷鍘繪妸瀹冩斁鍦ㄩ潤鎬佹瀯閫犲嚱鏁伴噷鐨勮繃紼嬨?/p>
榪欓噷瀹炰緥鏋勯犲嚱鏁拌褰誨簳瀹氫箟涓虹鏈夌殑錛屾墍浠ュ鎴風▼搴忓拰瀛愮被鏃犳硶棰濆鏋勯犳柊鐨勫疄渚嬶紝鎵鏈夌殑璁塊棶閫氳繃鍏叡闈欐佹垚鍛業(yè)nstance鑾峰緱鍞竴瀹炰緥鐨勫紩鐢紝絎﹀悎Singleton鐨勮璁℃剰鍥俱?/p>
(2) all writes to volatile data are “observable” so they must be executed religiously, and
(3) all operations on volatile data are executed in the sequence in which they appear in the source code.
1.琚0鏄庝負volatile鐨勫彉閲忓叾鍐呭鏄笉紼沖畾鐨?unstable),瀹冪殑鍊兼湁鍙兘鐢辯紪璇戝櫒鎵涓嶈兘鐭ユ檽鐨勬儏鍐墊墍鏀瑰彉銆?br>2.鎵鏈夊澹版槑涓簐olatile鐨勫彉閲忕殑鍐欐搷浣滈兘鏄彲瑙佺殑錛屽繀欏諱弗鏍兼墽琛宐e executed religiously銆?br>3.鎵鏈夊澹版槑涓簐olatile鐨勫彉閲忕殑鎿嶄綔錛堣鍐欙級閮藉繀欏諱弗鏍兼寜鐓ф簮浠g爜鐨勯『搴忔墽琛屻?br>volatile紜繚姣忔鐩存帴浠庡唴瀛樿鍙栧彉閲忕殑鍊箋俲ava涓殑volatile鏄法綰跨▼淇濊瘉涓婅堪涓変釜鏉′歡鐨勶紝鑰孋++鍙槸鍗曚竴綰跨▼鍐呬繚璇併?br>浣嗘槸鍗充嬌鏄疛AVA鑳藉璺ㄨ秺綰跨▼淇濊瘉錛屼粛鐒舵槸涓嶅鐨勫洜涓簐olatile鍜岄潪volatile鎿嶄綔涔嬮棿鐨勯『搴忎粛鐒舵槸鏈畾涔夌殑錛屾湁鍙兘浜х敓闂錛岃冭檻涓嬮潰鐨勪唬鐮侊細
volatile int vi;
void bar(void) {
vi = 1;
foo();
vi = 0;
}
鎴戜滑涓鑸細璁や負vi浼氬湪璋冪敤foo涔嬪墠璁劇疆涓?,璋冪敤瀹屽悗浼氳緗負0銆傜劧鑰岀紪璇戝櫒涓嶄細瀵逛綘淇濊瘉榪欎竴鐐癸紝瀹冧細寰堥珮鍏寸殑灝嗕綘鐨刦oo()縐諱綅錛屾瘮濡傝窇鍒皏i = 1鍓嶉潰錛屽彧瑕佸畠鐭ラ亾鍦╢oo()閲屼笉浼氭秹鍙婂埌鍏跺畠鐨剉olatile鎿嶄綔銆傛墍浠ュ畨鍏ㄧ殑鏂規(guī)硶鏄敤鏍呮爮memory barrier渚嬪“asm volatile (”" ::: “memory”)鍔犲埌foo鐨勫墠闈㈠拰鍚庨潰 鏉ヤ繚璇佷弗鏍肩殑鎵ц欏哄簭銆?span style="COLOR: red">鍐呭瓨灞忛殰淇濊瘉浠g爜鎵ц鏃朵弗鏍兼寜鐓ф簮浠g爜鐨勭殑欏哄簭銆?br>
涓縐嶈В閲?/p>
瀹為檯涓婏紝鍦ㄥ彲鎵ц鏂囦歡琚姞杞戒箣鍚庯紝鎺у埗鏉冪珛鍗充氦緇欑敱緙栬瘧鍣ㄦ彃鍏ョ殑Start鍑芥暟錛屽畠?yōu)畣瀵瑰悗闈q欎簺鍏ㄥ眬鍙橀噺榪涜鍑嗗錛?br>銆銆銆_osver 鎿嶄綔緋葷粺鐨勬瀯浠剁紪鍙?br> _winmajor銆鎿嶄綔緋葷粺鐨勪富鐗堟湰鍙?br> _winminor銆鎿嶄綔緋葷粺鐨勬鐗堟湰鍙?br> _winver銆鎿嶄綔緋葷粺瀹屽叏鐗堟湰鍙?br> __argc銆鍛戒護琛屽弬鏁頒釜鏁?br>銆 __argv銆鎸囧悜鍙傛暟瀛楃涓茬殑鎸囬拡鏁扮粍
_environ銆鎸囧悜鐜鍙橀噺瀛楃涓茬殑鎸囬拡鏁扮粍
Start鍑芥暟鍒濆鍖栧爢騫惰皟鐢╩ain鍑芥暟錛巑ian鍑芥暟榪斿洖涔嬪悗,Start鍑芥暟璋冪敤Exit鍑芥暟緇撴潫璇ヨ繘紼嬶紟
鍚姩鍑芥暟Start鐨勬簮浠g爜鍦細
銆銆銆crt0.c Microsoft Visual C++
c0w.asm Borladn C++
鍙︿竴縐嶈В閲?/p>
Some of the stuff that has to happen before main():
set up initial stack pointer
initialize static and global data
zero out uninitialized data
run global constructors
Some of this comes with the runtime library's crt0.o file or its __start() function. Some of it you need to do yourself.
Crt0 is a synonym for the C runtime library.
Depending on the system you're using the follwing may be incomplete, but it should give you an idea. Using newlib-1.9.0/libgloss/m68k/crt0.S as an outline, the steps are:
1. Set stack pointer to value of __STACK if set
2. Set the initial value of the frame pointer
3. Clear .bss (where all the values that start at zero go)
4. Call indirect of hardware_init_hook if set to initialize hardware
5. Call indirect of software_init_hook if set to initialize software
6. Add __do_global_dtors and __FINI_SECTION__ to the atexit function so destructors and other cleanup functions are called when the program exits by either returning from main, or calling exit
7. setup the paramters for argc, argv, argp and call main
8. call exit if main returns
絎笁縐嶈В閲婏細鍥浀C璇█錛堜笁錛夛細璋佽皟鐢ㄤ簡鎴戠殑 main錛?br>銆銆銆銆
銆銆銆銆鐜板湪鏈閲嶈鐨勬槸瑕佽窡寰椾笂娼祦錛屾墍浠ュ鐢ㄦ瘮杈冩椂楂︾殑璇濓紝璋佸姩浜嗘垜鐨勫ザ閰傝皝璋冪敤浜嗘垜鐨?main錛熶笉榪囦綔涓鴻綆楁満宸ヤ綔鑰咃紝鎴戝姖澶у榪樻槸涓嶈璧舵椂楂︼紝浠婂ぉJava鐑紝鏄庡ぉ .net 嫻佽錛屼粈涔堟椂楂﹀氨瀛︿粈涔堛傛垜鐨勬剰鎬濇槸鍏堣姳鍑犲勾鎶婂熀鏈姛瀛﹀ソ錛岀瓑浣犺刀鏃墮鐨勬椂鍊欎篃濂戒簨鍗婂姛鍊嶃傚簾璇濅笉澶氳浜嗐?br>銆銆銆銆
銆銆銆銆鎴戜滑閮藉惉璇磋繃涓鍙ヨ瘽錛?#8220;main鏄疌璇█鐨勫叆鍙?#8221;銆傛垜鑷充粖涓嶆槑鐧戒負浠涔堣繖涔堣銆傚氨濂藉儚濡傛灉鏈変漢璇達細“鎸i挶鏄場濡?#8221;錛岃偗瀹氭棤鏁扮爾澶存媿榪囨潵銆傝繖鍙ヨ瘽搴旇鏄?#8220;鎸i挶鏄場濡炵殑涓涓潯浠訛紝鍙笉榪囪繖涓潯浠剁壒鍒噸瑕?#8221;銆傞偅涔堜笂闈㈤偅鍙ヨ瘽搴旇鏄?“main鏄疌璇█涓竴涓鍙鳳紝鍙笉榪囪繖涓鍙鋒瘮杈冪壒鍒?#8221;
銆銆銆銆
銆銆銆銆鎴戜滑鐪嬩笅闈㈢殑渚嬪瓙錛?br>銆銆銆銆
銆銆銆銆/* file name test00.c */
銆銆銆銆
銆銆銆銆int main(int argc, char* argv)
銆銆銆銆{
銆銆銆銆 return 0;
銆銆銆銆}
銆銆銆銆
銆銆銆銆緙栬瘧閾炬帴瀹冿細
銆銆銆銆cc test00.c -o test.exe
銆銆銆銆浼氱敓鎴?test.exe
銆銆銆銆
銆銆銆銆浣嗘槸鎴戜滑鍔犱笂榪欎釜閫夐」錛?-nostdlib (涓嶉摼鎺ユ爣鍑嗗簱)
銆銆銆銆cc test00.c -nostdlib -o test.exe
銆銆銆銆閾炬帴鍣ㄤ細鎶ラ敊錛?br>銆銆銆銆undefined symbol: __start
銆銆銆銆
銆銆銆銆涔熷氨鏄錛?br>銆銆銆銆1. 緙栬瘧鍣ㄧ己鐪佹槸鎵?__start 絎﹀彿錛岃屼笉鏄?main
銆銆銆銆2. __start 榪欎釜絎﹀彿鏄▼搴忕殑璧峰鐐?br>銆銆銆銆3. main 鏄鏍囧噯搴撹皟鐢ㄧ殑涓涓鍙?br>銆銆銆銆
銆銆銆銆鍐嶆潵鎬濊冧竴涓棶棰橈細
銆銆銆銆鎴戜滑鍐欑▼搴忥紝姣斿涓涓ā鍧楋紝閫氬父瑕佹湁 initialize 鍜?de-initialize錛屼絾鏄垜浠啓 C 紼嬪簭鐨勬椂鍊欎負浠涔堟湁浜涙ā鍧楁病鏈夎繖涓や釜榪囩▼涔堝憿錛熸瘮濡傛垜浠▼搴忎粠 main 寮濮嬪氨鍙互 malloc錛宖ree錛屼絾鏄垜浠湪 main 閲岄潰鍗存病鏈夊垵濮嬪寲鍫嗐傚啀姣斿鍦?main 閲岄潰鍙互鐩存帴 printf錛屽彲鏄垜浠茍娌℃湁鎵撳紑鏍囧噯杈撳嚭鏂囦歡鍟娿?涓嶇煡閬撲粈涔堟槸 stdin錛宻tdout錛宻tderr 浠ュ強 printf 鍜?stdout 鍏崇郴鐨勭兢浼楄鍏堢湅鐪?C 璇█涓枃浠剁殑姒傚康)銆?br>銆銆銆銆
銆銆銆銆鏈変漢璇達紝榪欎簺涓滆タ涓嶉渶瑕佸垵濮嬪寲銆傚鏋滄?zhèn)ㄧ湡寰棙q欎箞鎯籌紝璇鋒偍涓嶈鍐嶅線涓嬬湅浜嗭紝鎴戜釜浜鴻涓鴻綆楁満杞歡涓嶉傚悎鎮(zhèn)ㄣ?br>銆銆銆銆
銆銆銆銆鑱槑鐨勪漢姘戠兢浼椾細鎯籌紝涓瀹氭槸鍦?main 涔嬪墠騫蹭簡浜涗粈涔堛備嬌榪欎簺鍑芥暟鍙互鐩存帴璋冪敤鑰屼笉鐢ㄥ垵濮嬪寲銆傞氬父錛屾垜浠細鍦ㄧ紪璇戝櫒鐨勭幆澧冧腑鎵懼埌涓涓悕瀛楃被浼間簬 crt0.o 鐨勬枃浠訛紝榪欎釜鏂囦歡涓寘鍚簡鎴戜滑鍒氭墠鎵璇寸殑 __start 絎﹀彿銆傦紙crt 澶ф鏄?C Runtime 鐨勭緝鍐欙紝璇峰ぇ瀹跺府鍔╃‘璁や竴涓嬨傦級
銆銆銆銆
銆銆銆銆閭d箞鐪熸鐨?crt0.s 鏄粈涔堟牱瀛愬憿錛熶笅闈㈡垜浠粰鍑洪儴鍒嗕吉浠g爜錛?br>銆銆銆銆
銆銆銆銆///////////////////////////////////////////////////////
銆銆銆銆section .text:
銆銆銆銆__start:
銆銆銆銆
銆銆銆銆 :
銆銆銆銆 init stack;
銆銆銆銆 init heap;
銆銆銆銆 open stdin;
銆銆銆銆 open stdout;
銆銆銆銆 open stderr;
銆銆銆銆 :
銆銆銆銆 push argv;
銆銆銆銆 push argc;
銆銆銆銆 call _main; (璋冪敤 main)
銆銆銆銆 :
銆銆銆銆 destory heap;
銆銆銆銆 close stdin;
銆銆銆銆 close stdout;
銆銆銆銆 close stderr;
銆銆銆銆 :
銆銆銆銆 call __exit;
銆銆銆銆////////////////////////////////////////////////////
銆銆銆銆
銆銆銆銆瀹為檯涓婂彲鑳借繕鏈夊緢澶氬垵濮嬪寲宸ヤ綔錛屽洜涓洪兘鏄拰鎿嶄綔緋葷粺鐩稿叧鐨勶紝絎旇呭氨涓嶄竴涓鍒楀嚭浜嗐?br>銆銆銆銆
銆銆銆銆娉ㄦ剰錛?br>銆銆銆銆1. 涓嶅悓鐨勭紪璇戝櫒錛屼笉涓瀹氱己鐪佸緱絎﹀彿閮芥槸 __start銆?br>銆銆銆銆2. 姹囩紪閲岄潰鐨?_main 灝辨槸 C 璇█閲岄潰鐨?main錛屾槸鍥犱負姹囩紪鍣ㄥ拰C緙栬瘧鍣ㄥ絎﹀彿鐨勫懡鍚嶆湁宸紓錛堥氬父鏄樊涓涓笅鍒掔嚎'_'錛夈?br>銆銆銆銆3. 鐩墠鎿嶄綔緋葷粺緇撴瀯鏈変袱涓富瑕佺殑鍒嗘敮錛氬井鍐呮牳鍜屽畯鍐呮牳銆傚井鍐呮牳鐨勪紭鐐規(guī)槸錛岀粨鏋勬竻鏅幫紝綆鍗曪紝鍐呮牳緇勪歡杈冨皯錛屼究浜庣淮鎶わ紱緙虹偣鏄紝榪涚▼闂撮氫俊杈冨錛岀▼搴忛綣佽繘鍑哄唴鏍革紝鏁堢巼杈冧綆銆傚畯鍐呮牳姝eソ鐩稿弽銆傛垜璇磋繖涓槸浠涔堢洰鐨勬槸錛氭病鍔炴硶淇濊瘉姣忎釜緇勪歡閮藉湪鐢ㄦ埛絀洪棿錛堟爣鍑嗗簱鍑芥暟錛変腑鍒濆鍖栵紝鏈変簺緇勪歡紜疄鍙兘涓嶈鍒濆鍖栵紝鎿嶄綔緋葷粺鍦ㄥ垱寤鴻繘紼嬬殑鏃跺欏湪鍐呮牳絀洪棿鍋氱殑銆傝繖渚濊禆浜庢搷浣滅郴緇熺殑鍏蜂綋瀹炵幇錛屾瘮濡傚爢錛屽畯鍐呮牳緇撴瀯鍙兘鍦ㄥ唴鏍稿垵濮嬪寲錛屽井鍐呮牳緇撴瀯鍦ㄧ敤鎴風┖闂達紱鍗充嬌鍚屾牱鏄井鍐呮牳錛岃繖涓笢涓滀篃鍙兘浼氳鎷垮埌鍐呮牳絀洪棿鍒濆鍖栥?br>銆銆銆銆
銆銆銆銆闅忕潃 CPU 鎶鏈殑鍙戝睍錛屽瓨鍌ㄩ噺鐨勮繀閫熸墿灞曪紝浠g爜澶嶆潅紼嬪害鐨勫鍔狅紝寰唴鏍歌瓚婃潵瓚婂鐨勯噰鐢ㄣ備綘浼氫負浜?10% 鐨勬晥鐜囦嬌浠g爜澶嶆潅搴﹀鍔犱箞錛熻鐭ラ亾姣忛殧 18 涓湀 CPU 鐨勯熷害灝變細緲諱竴鐣傛墍浠ユ垜瀵圭▼搴忓憳鐨勮姹傛槸錛屾垜棣栧厛涓嶈浣犵殑浠g爜鏁堢巼楂橈紝鎴戦鍏堣浣犵殑浠g爜鑳借 80% 鐨勪漢榪呴熺湅鎳傚茍鍙互緇存姢銆?/p>
鎬葷粨錛?/p>
main鍑芥暟鎵ц涔嬪墠錛屼富瑕佸氨鏄垵濮嬪寲緋葷粺鐩稿叧璧勬簮錛?/p>
1.璁劇疆鏍堟寚閽?/p>
2.鍒濆鍖杝tatic闈欐佸拰global鍏ㄥ眬鍙橀噺錛屽嵆data孌電殑鍐呭
3.灝嗘湭鍒濆鍖栭儴鍒嗙殑璧嬪垵鍊鹼細鏁板煎瀷short錛宨nt錛宭ong絳変負0錛宐ool涓篎ALSE錛屾寚閽堜負NULL錛岀瓑絳夛紝鍗?bss孌電殑鍐呭
4.榪愯鍏ㄥ眬鏋勯犲櫒錛屼及璁℃槸C++涓瀯閫犲嚱鏁頒箣綾葷殑鍚?/p>
5.灝唌ain鍑芥暟鐨勫弬鏁幫紝argc錛宎rgv絳変紶閫掔粰main鍑芥暟錛岀劧鍚庢墠鐪熸榪愯main鍑芥暟