±ÊÊÔ֪ʶ×ܽá(8)

1970-01-01 08:00

ÒªÇó C ÔËÐÐʱ×éÕë¶Ô OS ËùÌṩµÄ¶ÑÖÆ×÷СÇɵķÖÅä°ü×°³ÌÐò¡£Ëæ×Å OS ¶ÑµÄ¸Ä½ø£¬C ÔËÐÐʱ¶Ñµ÷Óõijɱ¾½«¼õС¡£

²Ù×÷ϵͳ£¨Windows NT ¼Ò×壩ÕýÔÚ²»¶Ï¸Ä½ø¶Ñ¡£ÇëËæÊ±¹Ø×¢ºÍÀûÓÃÕâЩ¸Ä½ø¡£

Murali Krishnan ÊÇ Internet Information Server (IIS) ×éµÄÊ×ϯÈí¼þÉè¼Æ¹¤³Ìʦ¡£´Ó 1.0 °æ±¾¿ªÊ¼Ëû¾ÍÉè¼Æ IIS£¬²¢³É¹¦·¢ÐÐÁË 1.0 °æ±¾µ½ 4.0 °æ±¾¡£Murali ×éÖ¯²¢Áìµ¼ IIS ÐÔÄÜ×éÈýÄê (1995-1998), ´ÓÒ»¿ªÊ¼¾ÍÓ°Ïì IIS ÐÔÄÜ¡£ËûÓµÓÐÍþ˹¿µÐÇÖÝ Madison ´óѧµÄ M.S.ºÍÓ¡¶È Anna ´óѧµÄ B.S.¡£¹¤×÷Ö®Í⣬Ëûϲ»¶ÔĶÁ¡¢´òÅÅÇòºÍ¼ÒÍ¥Åëâ¿¡£

http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=172835

ÎÒÔÚѧϰ¶ÔÏóµÄÉú´æ·½Ê½µÄʱºò¼ûµ½Ò»ÖÖÊÇÔÚ¶ÑÕ»(stack)Ö®ÖУ¬ÈçÏ CObject object;

»¹ÓÐÒ»ÖÖÊÇÔÚ¶Ñ(heap)ÖÐ ÈçÏ CObject* pobject=new CObject(); ÇëÎÊ

£¨1£©ÕâÁ½ÖÖ·½Ê½ÓÐÊ²Ã´Çø±ð£¿ £¨2£©¶ÑÕ»Óë¶ÑÓÐÊ²Ã´Çø±ð£¿£¿

---------------------------------------------------------------

1) about stack, system will allocate memory to the instance of object automatically, and to the heap, you must allocate memory to the instance of object with new or malloc manually.

2) when function ends, system will automatically free the memory area of stack, but to the heap, you must free the memory area manually with free or delete, else it will result in memory leak. 3)Õ»ÄÚ´æ·ÖÅäÔËËãÄÚÖÃÓÚ´¦ÀíÆ÷µÄÖ¸ÁÖУ¬Ð§Âʺܸߣ¬µ«ÊÇ·ÖÅäµÄÄÚ´æÈÝÁ¿ÓÐÏÞ¡£ 4£©¶ÑÉÏ·ÖÅäµÄÄÚ´æ¿ÉÒÔÓÐÎÒÃÇ×Ô¼º¾ö¶¨£¬Ê¹Ó÷dz£Áé»î¡£ ---------------------------------------------------------------

¶ÑºÍÕ»µÄ±È½Ï

´Ó¶ÑºÍÕ»µÄ¹¦ÄܺÍ×÷ÓÃÀ´Í¨Ë׵ıȽÏ,¶ÑÖ÷ÒªÓÃÀ´´æ·Å¶ÔÏóµÄ£¬Õ»Ö÷ÒªÊÇÓÃÀ´Ö´ÐгÌÐòµÄ.¶øÕâÖÖ²»Í¬ÓÖÖ÷ÒªÊÇÓÉÓڶѺÍÕ»µÄÌØµã¾ö¶¨µÄ:

ÔÚ±à³ÌÖУ¬ÀýÈçC/C++ÖУ¬ËùÓеķ½·¨µ÷Óö¼ÊÇͨ¹ýÕ»À´½øÐеÄ,ËùÓеľֲ¿±äÁ¿,ÐÎʽ²ÎÊý¶¼ÊÇ´ÓÕ»ÖзÖÅäÄÚ´æ¿Õ¼äµÄ¡£Êµ¼ÊÉÏÒ²²»ÊÇʲô·ÖÅä,Ö»ÊÇ´ÓÕ»¶¥ÏòÉÏÓþÍÐÐ,¾ÍºÃÏñ¹¤³§ÖеĴ«ËÍ´ø(conveyor belt)Ò»Ñù,Stack Pointer»á×Ô¶¯Ö¸ÒýÄãµ½·Å¶«Î÷µÄλÖÃ,ÄãËùÒª×öµÄÖ»ÊǰѶ«Î÷·ÅÏÂÀ´¾ÍÐÐ.Í˳öº¯ÊýµÄʱºò£¬ÐÞ¸ÄÕ»Ö¸Õë¾Í¿ÉÒÔ°ÑÕ»ÖеÄÄÚÈÝÏú»Ù.ÕâÑùµÄģʽËÙ¶È×î¿ì,µ±È»ÒªÓÃÀ´ÔËÐгÌÐòÁË.ÐèҪעÒâµÄÊÇ,ÔÚ·ÖÅäµÄʱºò,±ÈÈçΪһ¸ö¼´½«Òªµ÷ÓõijÌÐòÄ£¿é·ÖÅäÊý¾ÝÇøÊ±,Ó¦ÊÂÏÈÖªµÀÕâ¸öÊý¾ÝÇøµÄ´óС,Ò²¾Í˵ÊÇËäÈ»·ÖÅäÊÇÔÚ³ÌÐòÔËÐÐʱ½øÐеÄ,µ«ÊÇ·ÖÅäµÄ´óС¶àÉÙÊÇÈ·¶¨µÄ,²»±äµÄ,¶øÕâ¸ö\´óС¶àÉÙ\ÊÇÔÚ±àÒëʱȷ¶¨µÄ,²»ÊÇÔÚÔËÐÐʱ.

¶ÑÊÇÓ¦ÓóÌÐòÔÚÔËÐеÄʱºòÇëÇó²Ù×÷ϵͳ·ÖÅ䏸×Ô¼ºÄڴ棬ÓÉÓÚ´Ó²Ù×÷ϵͳ¹ÜÀíµÄÄÚ´æ·ÖÅä,ËùÒÔÔÚ·ÖÅäºÍÏú»Ùʱ¶¼

ÒªÕ¼ÓÃʱ¼ä£¬Òò´ËÓöѵÄЧÂʷdz£µÍ.µ«ÊǶѵÄÓŵãÔÚÓÚ,±àÒëÆ÷²»±ØÖªµÀÒª´Ó¶ÑÀï·ÖÅä¶àÉÙ´æ´¢¿Õ¼ä£¬Ò²²»±ØÖªµÀ´æ´¢µÄÊý¾ÝÒªÔÚ¶ÑÀïÍ£Áô¶à³¤µÄʱ¼ä,Òò´Ë,Óöѱ£´æÊý¾Ýʱ»áµÃµ½¸ü´óµÄÁé»îÐÔ¡£ÊÂʵÉÏ,ÃæÏò¶ÔÏóµÄ¶à̬ÐÔ,¶ÑÄÚ´æ·ÖÅäÊDZز»¿ÉÉÙµÄ,ÒòΪ¶à̬±äÁ¿ËùÐèµÄ´æ´¢¿Õ¼äÖ»ÓÐÔÚÔËÐÐʱ´´½¨Á˶ÔÏóÖ®ºó²ÅÄÜÈ·¶¨.ÔÚC++ÖУ¬ÒªÇó´´½¨Ò»¸ö¶ÔÏóʱ£¬Ö»ÐèÓÃnewÃüÁî±àÖÆÏà¹ØµÄ´úÂë¼´¿É¡£Ö´ÐÐÕâЩ´úÂëʱ£¬»áÔÚ¶ÑÀï×Ô¶¯½øÐÐÊý¾ÝµÄ±£´æ.µ±È»£¬Îª´ïµ½ÕâÖÖÁé»îÐÔ£¬±ØÈ»»á¸¶³öÒ»¶¨µÄ´ú¼Û:ÔÚ¶ÑÀï·ÖÅä´æ´¢¿Õ¼äʱ»á»¨µô¸ü³¤µÄʱ¼ä£¡ÕâÒ²ÕýÊǵ¼ÖÂЧÂʵ͵ÄÔ­Òò,

ÎÒÏëÄãÏÖÔÚ¸ÃÃ÷°×Á˰ɡ££º£©

---------------------------------------------------------------

ѧ¹ý»ã±àô£¿

ÄÚ´æÖеĶ«Î÷·ÖÈýÀࣺ´úÂë(code)¡¢Êý¾Ý(data)¡¢Õ»(stack),

ÆäÖÐstackÊǸºÔð×Ó³ÌÐòµÄµ÷Óúͷµ»ØµÄ£¬stackʵÐкó½øÏȳöµÄ»úÖÆ£¬µ÷ÓÃ×Ó³ÌÐòʱÏȽ«µ±Ç°µØÖ·µÄÏÂÒ»¸öµØÖ·ÁÙʱ±£´æµ½stackÖУ¬¶ø×Ó³ÌÐò¸ù¾ÝÕâ¸öµØÖ··µ»Ø¡£

ÔÚ×Ó³ÌÐò£¨º¯Êý£©ÄÚ²¿·ÖÅäµÄ¾Ö²¿±äÁ¿Ò²ÊÇÔÚstackÖзÖÅ䣬ÕâÑù£¬º¯Êý·µ»ØÊ±£¬·ÖÅäµÄ¿Õ¼äÒ²×Ô¶¯Êջء£ ¶øheapÔòÊÇϵͳ´ÓdataÇøÖÐÌØ±ðŲÓò¢ÇÒ¶ÀÁ¢¹ÜÀíµÄÒ»¸öÊý¾ÝÇø£¬ÓÃÓÚ³ÌÐòÖ´ÐÐÖÐÊý¾ÝµÄ¶¯Ì¬·ÖÅä¡£ ´Ó±íÏà¿´£ºÈ«¾Ö¾²Ì¬Êý¾ÝÔÚdataÖУ¬¾Ö²¿·ÖÅäµÄ¾²Ì¬Êý¾ÝÔÚstackÖУ¬¶¯Ì¬·ÖÅäµÄÊý¾ÝÔÚheapÖС£

C++ÖжÑÄÚ´æ(heap)µÄ¸ÅÄîºÍ²Ù×÷·½·¨

¶ÑÄÚ´æÊÇÊ²Ã´ÄØ£¿

ÎÒÃÇÖªµÀÔÚc/c++Öж¨ÒåµÄÊý×é´óС±ØÐèÒªÊÂÏȶ¨ÒåºÃ£¬ËûÃÇͨ³£ÊÇ·ÖÅäÔÚ¾²Ì¬ÄÚ´æ¿Õ¼ä»òÕßÊÇÔÚÕ»ÄÚ´æ¿Õ¼äÄڵ쬵«ÊÇÔÚʵ¼Ê¹¤×÷ÖУ¬ÎÒÃÇÓÐʱºòÈ´ÐèÒª¶¯Ì¬µÄΪÊý×é·ÖÅä´óС£¬ÔÚÕâÀïc¿âÖеÄmalloc.hÍ·ÎļþÖеÄmalloc()º¯Êý¾ÍΪÄú½â¾öÁËÎÊÌ⣨bc»òÕßÊÇÔÚÀϵıê×¼ÖÐÊÇalloc.h£©£¬ËüµÄº¯ÊýÔ­ÐÎÊÇvoid* malloc(size_t size)£¬ÔÚ¶¯Ì¬¿ª±ÙµÄÄÚ´æÖУ¬ÔÚʹÓÃÍêºóÎÒÃÇҪʹÓÃfree()º¯ÊýÀ´ÊͷŶ¯Ì¬¿ª±ÙµÄÄÚ´æ¿Õ¼ä¡£

ÏÂÃæÎÒÃÇÀ´¿´Ò»¸öÍêÕûµÄÀý×Ó£º

#include #include

using namespace std; main() {

int arraysize; //ÔªËØ¸öÊý

int *array; //ÓÃÓÚ¶¯Ì¬¿ª±ÙÊý×éµÄÖ¸Õë±äÁ¿

cin>>arraysize;

array=(int*)malloc(arraysize * sizeof(int));//ÀûÓÃmallocÔÚ¶ÑÄÚ´æÖпª±ÙÄÚ´æ¿Õ¼ä,ËüµÄ´óСÊÇÔªËØµÄ¸öÊý³ËÒÔ¸ÃÊý¾ÝÀàÐ͵ij¤¶È

for(int i=0;i

{

array[i]=i; }

for(int i=0;i

cout<

cout<

free(array);//ÀûÓÃfreeÊͷŶ¯Ì¬¿ª±ÙµÄ¶ÑÄÚ´æ¿Õ¼ä cin.get(); cin.get(); }

ÕâÀïÒªÌØ±ð×¢Òâ¸öµØ·½¾ÍÊÇ£º

array=(int*)malloc(arraysize * sizeof(int));

malloc()µÄº¯ÊýÔ­Ðα¾ÉíÊÇvoid* malloc(size_t size)£¬ÓÉÓÚ¶¯Ì¬·ÖÅäµÄ¿Õ¼ä¼ÆËã»ú²¢²»ÖªµÀÊÇÓÃÀ´×öʲôµÄËùÒÔÊÇÎÞÀàÐ͵쬵«ÄãÒª°ÑËüÓÃÔÚ¶¯Ì¬µÄÕûÐÎÊý×éÉϵÄʱºò¾ÍÒªÏÔʽµÄת»»³Éint*ÁË¡£

ÏÂÃæÎÒÃÇÔÙ½éÉÜc++Ëù¶ÀÓеĿª±ÙºÍÊͷŶÑÄÚ´æ¿Õ¼äµÄ·½·¨£¬newÐÞÊηûºÍdeleteÐÞÊηû¡£

newºÍdeleteÐÞÊηûµÄ²Ù×÷²¢²»ÐèҪͷÎļþµÄÖ§³Ö£¬ÕâÊÇc++Ëù¶ÀÓеÄ,new²Ù×÷Òª±Èmalloc¸üΪ¼òµ¥£¬Ö±½Ó˵Ã÷¿ª±ÙµÄÀàÐ͵ÄÊýÄ¿¾Í¿ÉÒÔÁË£¬deleteʹÓõÄʱºòÈç¹ûÊÇÊý×éÄÇô±ØÐëʹÓÃdelete[]¡£

#include

using namespace std; main() {

int arraysize; //ÔªËØ¸öÊý int *array;

cin>>arraysize;

array=new int[arraysize];//¿ª±Ù¶ÑÄÚ´æ

for(int i=0;i

array[i]=i; }

for(int i=0;i

cout<

cout<

delete[] array;//ÊͷŶÑÄÚ´æ cin.get(); cin.get();

http://www.zdnet.com.cn/developer/code/story/0,3800066897,39149800,00.htm

Á˽âÈýÖÖC++´æ´¢·½Ê½ ×÷Õߣº ZDNet China 2003-07-14 12:27 PM

C++ÓÐÈýÖÖ´æ´¢·½Ê½£º×Ô¶¯´æ´¢·½Ê½£¬¾²Ì¬´æ´¢·½Ê½ºÍ×ÔÓÉ´æ´¢·½Ê½¡£Ã¿Ò»ÖÖ´æ´¢·½Ê½¶¼Óв»Í¬µÄ¶ÔÏó³õʼ»¯µÄ·½·¨ºÍÉú´æ¿Õ¼ä¡£ÔÚÏÂÃæµÄ¶ÎÂäÖÐÎÒÃǽ«²ûÊöÕâÈýÖÖ´æ´¢·½Ê½µÄ²»Í¬Ö®´¦£¬²¢Ïò´ó¼ÒչʾÔõÑùÓÐЧ¶ø°²È«µØÊ¹ÓÃËüÃÇ¡£

×Ô¶¯´æ´¢·½Ê½

ͨ³££¬ÎÒÃDz¢²»°Ñ¾Ö²¿¶ÔÏó¶¨ÒåΪ¾²Ì¬µÄ»òÕßÍⲿµÄ£¬¶øÊǽ«Ëü¶¨ÒåΪ×Ô¶¯µÄºÍ¼Ä´æÆ÷µÄ¡£º¯ÊýµÄ×Ô±äÁ¿¶¼ÊÇ×Ô¶¯´æ´¢£¬ÕâÖÖ´æ´¢·½Ê½±»³Æ×÷Õ»´æ´¢¡£ÏÂÃæµÄÀý×Ó°üÀ¨Á˶àÖÖÉùÃ÷¶ÔÏóµÄ·½Ê½¡¢×Ô¶¯´æ´¢·½Ê½µÄ¸÷ÖÖÐÎʽ¡£

//s' storage type s is determined by the caller void f(const std::string & s);

//arguments passed by value are automatic void g(register int n);

int main() {

int n; // automatic because local, non-static, non-extern register inti; // register implies automatic auto double d; // auto implies automatic g(n); //passing a copy of n; the copy is automatic std::string s;

f(std::string temp()); // a temp object is also automatic }

×Ô¶¯¶ÔÏóͨ³£±»½¨Á¢ÔÚÒ»¸öº¯Êý»òÕßÒ»¸ö¿éÖУ¬µ±º¯Êý»ò¿é½áÊøÊ±£¬×Ô¶¯¶ÔÏó¾Í±»Á¢¼´Ïú»Ù¡£Òò¶ø£¬µ±Ëüÿ´Î½øÈëÒ»¸öº¯Êý»ò¿éµÄʱºò£¬×Ô¶¯¶ÔÏ󽫻ᴴ½¨Ò»¸öȫеÄÉèÖã¬×Ô¶¯±äÁ¿ºÍÎÞÀà¶ÔÏóµÄȱʡֵÊDz»¶¨µÄ¡£ ¾²Ì¬´æ´¢·½Ê½

¾²Ì¬´æ´¢·½Ê½

È«¾Ö¶ÔÏó¡¢Ò»¸öÀàµÄ¾²Ì¬Êý¾Ý³ÉÔ±ºÍº¯ÊýµÄ¾²Ì¬±äÁ¿¶¼ÊôÓÚ¾²Ì¬´æ´¢µÄ·¶³ë¡£Ò»¸ö¾²Ì¬¶ÔÏóµÄÄÚ´æµØÖ·ÔÚÕû¸ö³ÌÐòÔËÐеĹý³ÌÖÐÊDz»±äµÄ¡£ÔÚÒ»¸ö³ÌÐòµÄÉú´æ¿Õ¼äÄÚ£¬Ã¿¸ö¾²Ì¬¶ÔÏó½ö±»¹¹ÔìÒ»´Î¡£

¾²Ì¬Êý¾ÝµÄȱʡֵ±»³õʼ»¯Îª¶þ½øÖÆÁ㣬¾²Ì¬¶ÔÏóËæ×Å·ÇÎÞЧ¹¹Ô캯Êý£¨¹¹Ô캯ÊýÓɱàÒëÆ÷»òÕßC++Ö´ÐУ©½ô½Ó×ű»³õʼ»¯¡£ÏÂÃæµÄÀý×ÓչʾÁËÔõÑù¾²Ì¬´æ´¢¶ÔÏó¡£

int num; //global variables have static storage static int sum; //so do static objects declared globally intfunc() {

static int calls; //initialized to 0 by default return ++calls; }

class C { private: static bool b; };

namespace NS {

std::stringstr; //str has static storage }

×ÔÓÉ´æ´¢·½Ê½

×ÔÓÉ´æ´¢·½Ê½

×ÔÓÉ´æ´¢£¬Ò²±»³ÆÎª¶Ñ´æ´¢£¨ÔÚCÀ»òÕß¶¯Ì¬´æ´¢£¬Ëü°üÀ¨ÔÚ³ÌÐò´úÂëÖÐʹnewÀ´²úÉúËùÐèÒªµÄ¶ÔÏóºÍ±äÁ¿¡£¶ÔÏóºÍ±äÁ¿½«²»¶ÏµÄ·ÖÅä´æ´¢¿Õ¼ä£¬Ö±µ½µ÷ÓÃɾ³ý²Ù×÷½«ËüÃÇÊÍ·Å¡£

µ÷ÓÃɾ³ý³ÌÐòʧ°Ü½«»áÒýÆðÄÚ´æ²»×㣬µ÷Óù¹Îöº¯Êýʧ°ÜµÄ½á¹ûÔòÊÇÎÞ·¨Ô¤Áϵģ¬Óë×Ô¶¯ºÍ¾²Ì¬µÄ¶ÔÏóÏà±È£¬×ÔÓÉ´æ´¢¶ÔÏóµÄµØÖ·ÔÚÔËÐеÄʱºòÒѾ­±»È·¶¨¡£ÏÂÃæµÄÀý×ÓչʾÁË×Ô¶¯´æ´¢¶ÔÏóµÄ¹ý³Ì¡£

int *p = new in t; char *s = new char[1024]; Shape *ps=new Triangle;

//s' storage type s is determined by the caller void f(const std::string & s); std::string *pstr=new std::string f(pstr); delete p;


±ÊÊÔ֪ʶ×ܽá(8).doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ ÏÂÔØÊ§°Ü»òÕßÎĵµ²»ÍêÕû£¬ÇëÁªÏµ¿Í·þÈËÔ±½â¾ö£¡

ÏÂһƪ£ºËս̰æÐ¡Ñ§ÊýѧËÄÄê¼¶ÉϲáÓ¦ÓÃÌâרÏîÁ·Ï°

Ïà¹ØÔĶÁ
±¾ÀàÅÅÐÐ
¡Á ×¢²á»áÔ±Ãâ·ÑÏÂÔØ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÂíÉÏ×¢²á»áÔ±

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£º QQ£º