我一直在試圖獲取有關堆棧陣列在C#不二法門一些信息來分配這種緩衝液是用不安全的代碼stackalloc在C#陣列
char* buffer = stackalloc char[16];
作爲一種變通方法,我可以做字符結構。
struct Buffer16
{
public char c1,c2 //to 16
}
有沒有辦法通過創建一個新的類型,以緩衝不。在運行時創建。
我一直在試圖獲取有關堆棧陣列在C#不二法門一些信息來分配這種緩衝液是用不安全的代碼stackalloc在C#陣列
char* buffer = stackalloc char[16];
作爲一種變通方法,我可以做字符結構。
struct Buffer16
{
public char c1,c2 //to 16
}
有沒有辦法通過創建一個新的類型,以緩衝不。在運行時創建。
您可以將指針總是轉換爲基本類型的指針或結構:
char* buffer = stackalloc char[16];
int* i = (int*) buffer;
long* l = (long*) buffer;
byte* b = (byte*) buffer;
Point* p = (Point*) buffer;
所以你把所有的靈活性。您也可以使用Marshal.PtrToStructure
並反向使用,而不使用不安全的代碼。
這是回答您的問題嗎?
我不相信有沒有辦法做到這一點,沒有跳過籃球。
C#通常被設計爲阻止對內存資源的微觀管理,並且往往很難將CLR的內存管理器視爲除黑盒外的任何內容。這其中的很大一部分原因是內存管理器通常做得非常好,而當你不顧一切的時候它會做得最好。無論如何,如果將緩衝區放入堆棧而不是堆中,可以獲得真正的性能優勢,通常情況下,我不會感到驚訝。
你確定你需要在棧上分配你的數組嗎? – 2010-11-23 23:05:49
嘗試將C#轉換爲C沒有多大意義。不妨使用C,但這並不妨礙您這樣做。你已經知道這些咒語。 – 2010-11-23 23:16:58