Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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++ 使用IOCP时的内存策略_C++_Windows_Networking - Fatal编程技术网

C++ 使用IOCP时的内存策略

C++ 使用IOCP时的内存策略,c++,windows,networking,C++,Windows,Networking,我是Windows IOCP新手,目前正在使用IOCP重写服务器的网络部分。我试图弄清楚如何处理内存(Overlapped/WSABUF对象)。我有一个从Overlapped派生的小结构,它包含一个WSABUF和一些其他字段 我试着为这些对象保留一个环形缓冲区并重用它们,但没有成功。我认为,当调用完成例程时,其中一个对象将被传递回我,我可以再次将其标记为可用 当我在堆上分配它们(并保存在向量中)时,我如何知道何时删除/重用它们是安全的 谢谢, 迈克尔“没用”-什么?你的假设是正确的;一旦调用了完

我是Windows IOCP新手,目前正在使用IOCP重写服务器的网络部分。我试图弄清楚如何处理内存(Overlapped/WSABUF对象)。我有一个从Overlapped派生的小结构,它包含一个WSABUF和一些其他字段

我试着为这些对象保留一个环形缓冲区并重用它们,但没有成功。我认为,当调用完成例程时,其中一个对象将被传递回我,我可以再次将其标记为可用

当我在堆上分配它们(并保存在向量中)时,我如何知道何时删除/重用它们是安全的

谢谢,
迈克尔

“没用”-什么?你的假设是正确的;一旦调用了完成例程,就可以重用重叠结构。如果这不起作用,那么代码中的某个地方就有一个bug。请注意,您不需要使用引用计数。我相信RbMm所说的是引用计数是避免代码中可能过早重用结构的错误的最可靠的方法。但我不清楚这是否是您的问题,因为据我所知,您还没有描述症状是什么。
WSABUF
可以是临时对象,并在堆栈中作为局部变量分配。但是
WSABUF.buf
必须处于活动状态,并且在io操作停止之前不会更改complete@RbMm是正确的,在
WSASend
WSARec
中有记录:“如果此函数以重叠方式完成,则Winsock服务提供商有责任在从此调用返回之前捕获WSABUF结构。这使应用程序能够构建lpBuffers参数所指向的基于堆栈的WSABUF阵列。”