【发布时间】:2010-11-23 15:32:26
【问题描述】:
我的 Win32 C++ 应用程序充当 RPC 服务器 - 它具有一组用于处理请求的函数,并且 RPC 运行时创建一个单独的线程并在该线程中调用我的一个函数。
在我的函数中,我有一个 std::auto_ptr 用于控制在编译时已知大小的堆分配 char[] 数组。它accidentially works when compiled with VC++ 但根据 C++ 标准它是未定义的行为,我想摆脱它。
我有两个选择:std::vector 或堆栈分配的数组。因为我不知道为什么会有一个堆分配的数组,所以我想考虑用一个堆栈分配的数组来替换它。该数组有 10k 个元素,如果 RPC 运行时产生一个堆栈非常小的线程,我可能会面临堆栈溢出。
我想检测通常为线程分配了多少堆栈空间以及我的函数可以使用多少堆栈空间(它的被调用者肯定会消耗一些分配的空间)。我怎么能这样做?
【问题讨论】:
-
你有第三种选择,因为数组大小是已知的:
struct wrapper { char buffer[N]; }; std::auto_ptr<wrapper> ptr; -
不错的解决方法。我想我会使用它而不是冒险崩溃。
标签: c++ windows winapi visual-c++