Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时在堆栈上分配固定大小的数组?_C#_Stack_Heap_Fixed_Unsafe Pointers - Fatal编程技术网

C# 何时在堆栈上分配固定大小的数组?

C# 何时在堆栈上分配固定大小的数组?,c#,stack,heap,fixed,unsafe-pointers,C#,Stack,Heap,Fixed,Unsafe Pointers,我使用以下方法将字节从套接字流复制到磁盘: public static void CopyStream(Stream input, Stream output) { // Insert null checking here for production byte[] buffer = new byte[8192]; int bytesRead; while ((bytesRead = input.Read(buffer, 0, buffer.Length))

我使用以下方法将字节从套接字流复制到磁盘:

 public static void CopyStream(Stream input, Stream output)
 {
    // Insert null checking here for production
    byte[] buffer = new byte[8192];
    int bytesRead;
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, bytesRead);
    }
}
我好奇的是:
buffer
是在堆栈上还是在服务器上分配的 堆当然,我可以使这个方法不安全,并将
fixed
关键字添加到
变量声明,但如果我不需要,我不想这样做。

将在堆栈上分配
缓冲区
变量,该
缓冲区
变量所在的8192字节内存将在堆上

你为什么要谈论
fixed
?你是想加快速度吗?它几乎肯定不会

引用Eric Lippert的话:

“但在绝大多数项目中 在那里,局部变量分配 而交易地点也不会是这样 性能瓶颈。”


.

将在堆栈上分配
buffer
变量,而
buffer
变量所在的8192字节内存将在堆上

你为什么要谈论
fixed
?你是想加快速度吗?它几乎肯定不会

引用Eric Lippert的话:

“但在绝大多数项目中 在那里,局部变量分配 而交易地点也不会是这样 性能瓶颈。”


.

很确定它是从堆中分配的,但你为什么会在意呢?如果有对内存的引用,GC不会攻击内存……如果您希望在堆栈上分配内存,我看不出“修复”对您有多大帮助。当然,如果您希望在堆栈上分配它,那么恰当命名的“stackalloc”关键字就是您想要的,而不是“fixed”。也就是说,你到底为什么要在堆栈上分配这个呢?堆栈寄存器危险移动8K是否比托管堆高水位线安全移动8K更好?此外,您是否担心分配的性能?你担心的是进行分配需要几纳秒,而不是担心需要数千或数百万纳秒才能将你正在写入的巨大铁盘旋转到正确的位置?在燃烧毫秒的同时优化纳秒是没有任何意义的。非常确定它是从堆中分配的,但是为什么你会在意呢?如果有对内存的引用,GC不会攻击内存……如果您希望在堆栈上分配内存,我看不出“修复”对您有多大帮助。当然,如果您希望在堆栈上分配它,那么恰当命名的“stackalloc”关键字就是您想要的,而不是“fixed”。也就是说,你到底为什么要在堆栈上分配这个呢?堆栈寄存器危险移动8K是否比托管堆高水位线安全移动8K更好?此外,您是否担心分配的性能?你担心的是进行分配需要几纳秒,而不是担心需要数千或数百万纳秒才能将你正在写入的巨大铁盘旋转到正确的位置?在燃烧毫秒的同时优化纳秒是没有任何意义的。完全同意你的观点。首先进行测量,以便了解优化内容和优化位置。通常它在I/O调用中花费了大量时间。权威的真理,与真理的权威。你需要做一个测试来找出真相。完全同意你的观点。首先进行测量,以便了解优化内容和优化位置。通常它在I/O调用中花费了大量时间。权威的真理,与真理的权威。你需要做一个测试来找出真相。