x86 的 C++程序怎么没地方指定 stack 和 heap 的大小?

2023-10-16 16:35:23 +08:00
TESTFLIGHT2021  TESTFLIGHT2021
如题,请教一下~~
1336 次点击
所在节点   程序员  程序员
12 条回复
tool2d
tool2d
2023-10-16 16:47:05 +08:00
stack 肯定有啊,编译器参数里就有。heap 一般是系统维护的,不能自己设置。

感觉问一下 gpt ,比发帖等回复要快。
cnbatch
cnbatch
2023-10-16 16:55:03 +08:00
tool2d
tool2d
2023-10-16 17:00:45 +08:00
@cnbatch 感觉 windows 设置堆大小没意义吧。内存页面增长大小都是 OS 进行管理的,exe 总占用内存也是系统剩余内存多少决定的。
cnbatch
cnbatch
2023-10-16 17:07:25 +08:00
@tool2d 大多数情况下,确实没谁想过设置堆的值,只是 OP 想故意设限,那就由他吧╮(╯-╰)╭
TESTFLIGHT2021
TESTFLIGHT2021
2023-10-16 17:34:48 +08:00
@tool2d 32 位应用寻址空间<4G stack 起始 结束 应该有限制吧
TESTFLIGHT2021
TESTFLIGHT2021
2023-10-16 17:36:17 +08:00
@cnbatch https://learn.microsoft.com/en-us/cpp/build/reference/stack-stack-allocations?view=msvc-170 按照这个 stack 大小是 1MB 但是实际好像没管过这个,或者可能超过这个值了,好像也没问题啊?
cnbatch
cnbatch
2023-10-16 17:50:46 +08:00
@TESTFLIGHT2021 确定没问题?

WIndows MSVC ,试试这段:

#include <iostream>

int main()
{
char test_stack[1024 * 256 * 2]{};
test_stack[0] = 'E';
printf("%s\n", test_stack);
return 0;
}

还有这段:

#include <iostream>

int main()
{
char test_stack[1024 * 1024 * 2]{};
test_stack[0] = 'E';
printf("%s\n", test_stack);
return 0;
}

一个未超出 1M ,另一个远超 1M ,看看有没有问题
TESTFLIGHT2021
TESTFLIGHT2021
2023-10-16 18:05:58 +08:00
@cnbatch 我试试 我平日都是 new delete new 有时候好几 MB 的空间。。。好像也没出问题
liuhan907
liuhan907
2023-10-16 18:27:26 +08:00
@TESTFLIGHT2021 new 那是堆空间当然没问题
daimiaopeng
daimiaopeng
2023-10-17 10:33:24 +08:00
vs 在项目设置里面有
lff0305
lff0305
2023-10-17 10:34:03 +08:00
Win 平台上在 CreateThread 的时候可以设置,

HANDLE CreateThread(
[in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] SIZE_T dwStackSize,
[in] LPTHREAD_START_ROUTINE lpStartAddress,
[in, optional] __drv_aliasesMem LPVOID lpParameter,
[in] DWORD dwCreationFlags,
[out, optional] LPDWORD lpThreadId
);
TESTFLIGHT2021
2023-10-17 11:32:25 +08:00
@lff0305 创建的线程 stack 和主线程可以不一样?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982492

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX