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

218 天前
 TESTFLIGHT2021
如题,请教一下~~
1137 次点击
所在节点    程序员
12 条回复
tool2d
218 天前
stack 肯定有啊,编译器参数里就有。heap 一般是系统维护的,不能自己设置。

感觉问一下 gpt ,比发帖等回复要快。
cnbatch
218 天前
tool2d
218 天前
@cnbatch 感觉 windows 设置堆大小没意义吧。内存页面增长大小都是 OS 进行管理的,exe 总占用内存也是系统剩余内存多少决定的。
cnbatch
218 天前
@tool2d 大多数情况下,确实没谁想过设置堆的值,只是 OP 想故意设限,那就由他吧╮(╯-╰)╭
TESTFLIGHT2021
218 天前
@tool2d 32 位应用寻址空间<4G stack 起始 结束 应该有限制吧
TESTFLIGHT2021
218 天前
@cnbatch https://learn.microsoft.com/en-us/cpp/build/reference/stack-stack-allocations?view=msvc-170 按照这个 stack 大小是 1MB 但是实际好像没管过这个,或者可能超过这个值了,好像也没问题啊?
cnbatch
218 天前
@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
218 天前
@cnbatch 我试试 我平日都是 new delete new 有时候好几 MB 的空间。。。好像也没出问题
liuhan907
218 天前
@TESTFLIGHT2021 new 那是堆空间当然没问题
daimiaopeng
217 天前
vs 在项目设置里面有
lff0305
217 天前
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
217 天前
@lff0305 创建的线程 stack 和主线程可以不一样?

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

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

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

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

© 2021 V2EX