如果我在C++;我可以在另一个系统中取消分配吗 如果在C++中(一个新的或Malc)中的一个线程分配内存,我能将它分配给另一个线程吗?或者必须同时出现在同一个线程中?理想情况下,我希望首先避免这种情况,但我很想知道它是合法的、非法的还是依赖于实现的 < > >强>编辑:< /强>我目前使用的编译器包括VS2003、VS2008和嵌入式C++ 4、TestPress XP、Vista、Windows 7以及Windows CE/PockPC和移动电话的各种味道。基本上所有的微软,但在一系列神秘的平台上。 < P>对不起这个无用的答案,但是C++标准没有线程,所以所有的赌注都关闭了!p> 但是,一些C++编译器和运行时系统支持线程,在这些线程中,通常需要告诉链接器使用标准库的线程安全版本。 ,一般来说,多线程系统上的MalC/Cn/Field/Delphi是线程安全的,因此这不应该是问题-并且在一个线程中分配,在另一家公司进行交易是一件很常见的事情

如果我在C++;我可以在另一个系统中取消分配吗 如果在C++中(一个新的或Malc)中的一个线程分配内存,我能将它分配给另一个线程吗?或者必须同时出现在同一个线程中?理想情况下,我希望首先避免这种情况,但我很想知道它是合法的、非法的还是依赖于实现的 < > >强>编辑:< /强>我目前使用的编译器包括VS2003、VS2008和嵌入式C++ 4、TestPress XP、Vista、Windows 7以及Windows CE/PockPC和移动电话的各种味道。基本上所有的微软,但在一系列神秘的平台上。 < P>对不起这个无用的答案,但是C++标准没有线程,所以所有的赌注都关闭了!p> 但是,一些C++编译器和运行时系统支持线程,在这些线程中,通常需要告诉链接器使用标准库的线程安全版本。 ,一般来说,多线程系统上的MalC/Cn/Field/Delphi是线程安全的,因此这不应该是问题-并且在一个线程中分配,在另一家公司进行交易是一件很常见的事情,c++,multithreading,memory-management,heap,C++,Multithreading,Memory Management,Heap,由于线程是一种实现功能,它当然取决于实现-例如,某些系统要求您链接多线程运行时库。为了能够在一个线程中分配,在另一个线程中释放,您需要运行时库是线程安全的。自Visual Studio 2005以来,Microsoft运行时都是线程安全的,Visual Studio 2003同时提供单线程和线程安全运行时-显然,如果使用线程,您应该选择与多线程运行时链接 至于它是合法的、非法的还是依赖于实施的,我不会说以上任何一点。它完全超出了标准的范围,因为它根本没有提到线程。 我相信这是定义的实现,因为C+

由于线程是一种实现功能,它当然取决于实现-例如,某些系统要求您链接多线程运行时库。

为了能够在一个线程中分配,在另一个线程中释放,您需要运行时库是线程安全的。自Visual Studio 2005以来,Microsoft运行时都是线程安全的,Visual Studio 2003同时提供单线程和线程安全运行时-显然,如果使用线程,您应该选择与多线程运行时链接


至于它是合法的、非法的还是依赖于实施的,我不会说以上任何一点。它完全超出了标准的范围,因为它根本没有提到线程。

我相信这是定义的实现,因为C++标准没有说明线程将如何共享地址空间。

它是有效的,因为线程属于同一进程,共享相同的地址空间。

< p>新建/删除阻止您在单独线程中分配和取消分配的线程。正如许多人所说,该标准对多线程没有任何规定——既不支持多线程,也没有任何东西阻止您使用任何标准工具来实现多线程。这是好的也是坏的,因为您可以做任何您想做的事情,但是该语言没有提供直接的机制来帮助您安全地完成它


然而,您可能需要应对许多潜在的技术问题。许多编译器都有多线程和单线程风格的运行库,它们实现了new&delete,所以您必须确保使用正确的运行库。(VS 2008已经废除了单线程CRT,因此这不是一个问题。)更重要的是,您的软件必须从头开始设计为具有多线程意识,这是我们面临的最大挑战。资源需要得到保护,所有权必须明确,您需要避免死锁和竞争条件。但是,这可能是在分配和释放线程时面临的最重要和最困难的挑战,但它与您的问题没有直接关系,所以我将把它留给另一个讨论。

线程在C++标准中根本没有被讨论。所有这些都是特定于实现的。如果您告诉使用witch编译器、操作系统等,您可能会得到更多帮助answsers@Ian,编译器和操作系统详细信息。对于大型数据项的高效线程间通信,除了线程安全容器中更复杂的线程间通信对象池之外,几乎没有其他选择。谢谢Joe,值得一提的是,我们在VS2003上还有一些开发。VS2003同时提供了多线程和单线程运行时-您只需确保链接正确。感谢您的回复John。我有意将问题缩小,因为我知道讨论编写多线程代码的各种潜在陷阱需要一本大书。我说这句话是因为我自己不止一次跌入上述深渊;)这就像玩一个旧的动视游戏,不是吗?