雖然這個問題我沒找到解決,但不影響指標此刻在我心中肅立起的高大形象,我覺的它就是玄話武俠**《誅仙》最強大的**----誅仙劍。
來看一下c#操作指標的一些常用手段。
c#要使用指標必需先把這個勾打上。
常用**我就直接copy別人的了, 常用c#+指標原**的出處是這篇文章《c# 指標複習示例
》
/// /// 指標,儲存的是乙個位址的整數。
///
class program
static void s(object o)
static void s(params object o)
#region 指標簡單示例
unsafe static void demo1()
#endregion
#region 指標的型別轉換
unsafe static void demo2()
#endregion
#region dword記憶體塊
unsafe static void demo3()
", sizeof(byte)));
s(string.format("short:", sizeof(short)));
s(string.format("int:", sizeof(int)));
s(string.format("long:", sizeof(long)));
s(string.format("float:", sizeof(float)));
s(string.format("double:", sizeof(double)));
s(string.format("decimal:", sizeof(decimal)));
s("");
s("從高到矮……");
s(string.format("decimal: +16 ↑", (uint)&m2));
s(string.format("byte: +1 ↑", (uint)&b));
s(string.format("short: +2 ↑", (uint)&s));
s(string.format("int: +4 ↑", (uint)&i));
s(string.format("long: +8 ↑", (uint)&l));
s(string.format("float: +4 ↑", (uint)&f));
s(string.format("double: +8 ↑", (uint)&d));
s(string.format("decimal: +16 ↑", (uint)&m));
s("有沒有發現byte和short也是4個位元組的記憶體塊?因為.net約定,最少要占用4個位元組。");
}#endregion
#region 指標的運算
unsafe static void demo4()
", (uint)pbyte));
s(string.format("uint:", (uint)puint));
s(string.format("double:", (uint)pdouble));
pbyte -= 3;
++puint;
s("\n");
double* pdouble2 = pdouble + 4;
s(string.format("byte:。old - 3 * 1", (uint)pbyte));
s(string.format("uint:。old + 4 * 1", (uint)puint));
s(string.format("double2:。pdouble + 4 * 8", (uint)pdouble2));
}#endregion
#region 結構指標
unsafe static void demo5()
struct mystruct
#endregion
#region 類指標
unsafe static void demo6()
*x = 10;
*y = 11;
s(mc.x + " " + mc.y);}}
class myclass
#endregion
另外,c#提供乙個的關鍵字stackalloc用於申請堆疊記憶體。當函式執行完畢後,記憶體會被自動**。使用這個堆記憶體的時候不必擔心記憶體洩漏問題。
public class program
//測試內容
for (int i = 0; i < 100; i++)
console.readline();}}
最後有一篇《c# 指標之美
》的文章,下面這些話摘抄自那裡
指標也可以操作非託管堆上的記憶體,如:
intptr handle = system.runtime.interopservices.marshal.allochglobal(4system.runtime.interopservices.marshal.allochglobal 用來從非託管堆上分配記憶體。system.runtime.interopservices.marshal.freehglobal(handle)用來釋放從非託管對上分配的記憶體。這樣我們就可以避開gc,自己管理記憶體了。); int32* p = (int32*)handle;
*p = 20
; messagebox.show(p->tostring());
system.runtime.interopservices.marshal.freehglobal(handle);
如果使用非託管記憶體,建議用dispose模式來管理記憶體,這樣做有以下好處: 可以手動dispose來釋放記憶體;可以使用using 關鍵字開管理記憶體;即使不釋放,當dispose物件被gc**時,也會收回記憶體。
下面是dispose模式的簡單例子:
public unsafe class unmanagedmemory : idisposable
private byte* handle;
private bool _disposed = false;
public unmanagedmemory(int bytes)
public void dispose()
protected virtual void dispose( bool isdisposing )
}_disposed = true;
}~unmanagedmemory()
}
使用**
using (unmanagedmemory memory = new unmanagedmemory(10))
除錯C memory leak常用手段
from 1,check handle leak.use lua script to search the codes.2,check memory leak.if you use crt,you could use crtsetdbgflag crtsetdbgflag crtdbg report...
建模的常用手段 組合與聚合
2 聚合 當兩個物件之間是整體與部分的關係時,它們之間就是組合的關係。對於如下問題 構建乙個計算機類,一台計算機,由cpu晶元,硬碟,記憶體等組成。cpu晶元也使用類來表示。計算機類和cpu類就是組合關係,組合關係具有如下特點 擁有者需要對被擁有者負責,是一種比較強的關係,是整體與部分的關係。具體組...
解析黑客利用交換機漏洞攻擊的常用手段
idc報告顯示,交換機市場近年來一直保持著較高的增長勢頭,到2009年市場規模有望達到15.1億美元。交換機在企業網中占有重要的地位,通常是整個網路的核心所在,這一地位使它成為黑客入侵和病毒肆虐的重點物件,為保障自身網路安全,企業有必要對區域網上的交換機漏洞進行全面了解。以下是利用交換機漏洞的五種攻...