Windows 如何为线程挑选内存?

Posted

技术标签:

【中文标题】Windows 如何为线程挑选内存?【英文标题】:How Does Windows Pick memory for threads? 【发布时间】:2015-08-09 19:27:14 【问题描述】:

我以前的帖子,(编辑:现已解决) https://***.com/questions/30470978/new-thread-corrupting-string-data-c 看起来太复杂了。所以这是一个更笼统的帖子来回答我的问题。

如果在 If、For、while、case 等中创建线程。线程的堆是为控制语句分配的内存的子集吗?如果是这样,有没有办法选择在内存中创建新线程的位置?谢谢你。 (Windows 7、Visual Studio 2013、C++)

我还有一个问题: Mutex not correctly used? Continuation of past questions

【问题讨论】:

如果您认为您的旧问题太复杂,请不要让我们阅读它,请在这里提出一个完整的新问题 我不觉得它复杂,它已经被mods标记了。我已经链接它仅供参考。我的问题附加了一个“?”便于阅读。 【参考方案1】:

不...线程与主线程和应用程序启动的所有其他线程共享内存。这就是使多线程变得更加困难的原因。当多个线程访问同一内存时,您必须小心。

所有线程共享相同的资源,但只有主线程可以与 GUI 交互。

【讨论】:

感谢您的澄清。您知道为特定线程分配内存的调用吗?我的问题是子线程是在父线程创建的数据上创建的。 这应该是不可能的。您如何检查数据是否被覆盖? 我有一个 LPTSTR 指向内存中的一个字符串,我已经为这个指针创建了一个手表。当我逐步执行我的代码时,字符串值(在指针指向的地址处)从 L"Features_30_34_40.bmp" 变为一堆 unicode 字符。我使用了 Visual Studio 的内存窗口,并且正在通过字符串数据创建新线程。你可以在内存中看到字符串,然后你可以看到它被改变了。 这看起来很奇怪......而且如果没有一些代码很难解决!你能试着把你的代码减少到 10 行来重现错误吗? 在 sudo 中的代码看起来像:Make a thread; Pass a message to parent thread; Kill thread; Mainthread takes message and makes a string; Make a new thread and pass this new string; 我会花一些时间写一个用 c++ 表示这个的简短程序

以上是关于Windows 如何为线程挑选内存?的主要内容,如果未能解决你的问题,请参考以下文章

深度 | 英伟达Titan Xp出现后,如何为深度学习挑选合适的GPU?这里有份性价比指南

如何为 SQLCMD 使用 Windows 用户?

如何为 UIViewController.view 中也具有 UITapGestureRecognizer 的 UIView 挑选和操作 UITapGestureRecognizer?

如何为mysql xampp,windows设置默认排序规则

Java 并发是如何为 Windows 实现的? [关闭]

在windows下如何为特定进程设置指定代理?