C 指標 常用手段

2021-06-16 09:29:57 字數 3514 閱讀 9199

雖然這個問題我沒找到解決,但不影響指標此刻在我心中肅立起的高大形象,我覺的它就是玄話武俠**《誅仙》最強大的**----誅仙劍。

來看一下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(4

); int32* p = (int32*)handle;

*p = 20

; messagebox.show(p->tostring());

system.runtime.interopservices.marshal.freehglobal(handle);

system.runtime.interopservices.marshal.allochglobal 用來從非託管堆上分配記憶體。system.runtime.interopservices.marshal.freehglobal(handle)用來釋放從非託管對上分配的記憶體。這樣我們就可以避開gc,自己管理記憶體了。

如果使用非託管記憶體,建議用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億美元。交換機在企業網中占有重要的地位,通常是整個網路的核心所在,這一地位使它成為黑客入侵和病毒肆虐的重點物件,為保障自身網路安全,企業有必要對區域網上的交換機漏洞進行全面了解。以下是利用交換機漏洞的五種攻...