程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Visual Studio:針對Java開發人員的C#編程語言(2)(12)

Visual Studio:針對Java開發人員的C#編程語言(2)(12)

編輯:關於C語言

垃圾回收

在 C 和 C++ 中,許多對象一旦聲明,就需要編程人員在對象可以安全使用之前給它們分配資源。在對象使用完資源之後,將這些資源釋放回自由內存池也是編程人員的責任。如果資源沒有釋放,當越來越多的資源被不必要地消耗時,就可以說代碼洩漏內存。而在另一方面,如果資源過早地釋放,則可能會發生數據丟失、其他內存區域破壞和 null 指針異常。

為了防止這些危險的發生,Java 和 C# 都通過一個應用程序來獨立地管理所有對象的生命周期。
在 Java 中,JVM 通過跟蹤所分配資源的引用來處理未使用的內存的釋放。只要 JVM 檢測到一個資源不再被一個有效的引用加以引用,該資源就會被當作垃圾回收。

在 C# 中,通過具有與 JVM 類似功能的公共語言運行庫 (CLR) 來處理垃圾回收。CLR 垃圾回收器周期性檢查內存堆,以查看是否有未引用的對象,並釋放這些對象所占用的資源。

安全代碼和不安全代碼

C# 的一個特別值得注意的特性是它支持非類型安全代碼。通常,CLR 負責監視 IL(Intermediate Language,中間語言)代碼的行為,並阻止任何有問題的操作。然而,有時我們希望直接訪問低級功能(例如 Win32 API 調用),只要我們負責保證這樣的代碼操作正確,我們就會被允許這樣做。這樣的代碼必須放在源代碼的不安全塊中。

unsafe 關鍵字

進行低級 API 調用、使用指針算法、執行一些其他不安全操作的 C# 代碼必須放在用 unsafe 關鍵字標記的塊中。下面任何一種情況都可以標記為 unsafe:

• 一個完整的方法 • 一段放在括號中的代碼塊 • 一個單獨的語句
下面的示例演示了上面所有三種情況中 unsafe 的使用:
using System;
class UnsafeClass
{
 unsafe static void PointyMethod()
 {
  int i=10;
  int *p = &i;
  Console.WriteLine("*p = " + *p);
  string address = "Pointer p = " + int.Format((int) p, "X");
  Console.WriteLine(address);
 }
static void StillPointy()
{
 int i=10;
 unsafe
 {
  int *p = &i;
  Console.WriteLine("*p = " + *p);
  string address = "Pointer p = " + int.Format((int) p, "X");
  Console.WriteLine(address);
 }
}
static void Main()
{
 PointyMethod();
 StillPointy();
}
 }

在這段代碼中,整個 PointyMethod() 方法被標記為 unsafe,因為該方法聲明並使用了指針。與這段代碼一樣,一旦某個代碼塊再次使用指針,StillPointy() 方法就將其標記為 unsafe。

有關不安全代碼的更多信息,請參見 。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved