Ricado wrote:
Java, C# 都(恕刪)
受教了,,我以為只寫韌體才比較會用到指標....
jypn ja wrote:
受教了,,我以為只寫(恕刪)
Ricado wrote:
像我在寫 Mail Server 的時候,就必須用很多的指標,甚至雙重指標
POSITION GetNextPart(POSITION pos, CImapMimePart **ppMimePart);
一套 Mail Server 除了主執行緒掌控正個系統運作,最基本的就必須開啟兩個 Linstening 的通訊端(POP3/SMTP) ,更不要說對外傳遞的 SMTP 或是加上 IPV6, TLS/SSL。Linstening 作業都必須由多個 class 完成。
例如一個 SmtpListenSocket 收到連線,建立一個 SmtpThread 負責處理這個 session 的生命週期,並且由SmtpThread 實作一個SmtpSocket 負責處理 SmtpListenSocket 丟過來的通訊連線。
MailService -> SmtpListenSocket ->SmtpThread ->SmtpSocket 不使用指標怎麼傳資料?
這行則是在 SmtpSocket 中呼叫 CSmtpThread 的 PostStatusMessage 方法。
(CSmtpThread*)m_pThread)->PostStatusMessage(szError);
至於記憶體回收,一般宣告的還好,用過就刪
LPSTR lpszMessageData = ConvertLPWSTRToLPSTR(m_strAppendMessage);
outputFile.Write(lpszMessageData, strlen(lpszMessageData));
delete [] lpszMessageData;
如果是傳址的,有時候怕自己忘了,還會加註解,避免誤刪,或忘了刪。
// dynamically allocate memory for status message (receiver will delete it!)
LPTSTR lpszFileName = new TCHAR[nLength+1];
lstrcpy(lpszFileName, strFileName);
::PostMessage(AfxGetMainWnd()->m_hWnd, WM_INCOMINGMESSAGE, (WPARAM)lpszFileName, (LPARAM)NULL);
後來我用 C# 寫了一套 Web Server,這時候就不用那麼麻煩了,但是可以很明顯地看到記憶題會一直起起伏伏,也就是 .NET Framework 的 CLR 會一直等到記憶體不夠用了,才會叫用 GC 回收。
guest2000 wrote:
有的OS好像會自己主動去作GC的動作?當程式結束時就執行GC,有的OS則是被動的,當發生Memory不夠時才執行GC?
guest2000 wrote:
交流兼請教.有的OS(恕刪)
莎朗石頭 wrote:
我不是Socket專(恕刪)
chunchiahsieh wrote:
印象中C#可以透過設(恕刪)
<gcserver enabled="true|false"></gcserver>