1
tool2d 2023-10-16 16:47:05 +08:00
stack 肯定有啊,编译器参数里就有。heap 一般是系统维护的,不能自己设置。
感觉问一下 gpt ,比发帖等回复要快。 |
2
cnbatch 2023-10-16 16:55:03 +08:00
哪个系统?
单论 Windows 的话,有: 设置栈大小: https://learn.microsoft.com/en-us/cpp/build/reference/stack-stack-allocations 设置堆大小: https://learn.microsoft.com/en-us/cpp/build/reference/heap BSD 与 Linux ,可以自己设栈大小: https://stackoverflow.com/questions/2275550/change-stack-size-for-a-c-application-in-linux-during-compilation-with-gnu-com https://linux.die.net/man/2/setrlimit https://man.freebsd.org/cgi/man.cgi?query=setrlimit 关键点:setrlimit(RLIMIT_STACK 至于堆大小,那就把 RLIMIT_STACK 换成 RLIMIT_AS |
3
tool2d 2023-10-16 17:00:45 +08:00
@cnbatch 感觉 windows 设置堆大小没意义吧。内存页面增长大小都是 OS 进行管理的,exe 总占用内存也是系统剩余内存多少决定的。
|
5
TESTFLIGHT2021 OP @tool2d 32 位应用寻址空间<4G stack 起始 结束 应该有限制吧
|
6
TESTFLIGHT2021 OP @cnbatch https://learn.microsoft.com/en-us/cpp/build/reference/stack-stack-allocations?view=msvc-170 按照这个 stack 大小是 1MB 但是实际好像没管过这个,或者可能超过这个值了,好像也没问题啊?
|
7
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 ,看看有没有问题 |
8
TESTFLIGHT2021 OP @cnbatch 我试试 我平日都是 new delete new 有时候好几 MB 的空间。。。好像也没出问题
|
9
liuhan907 2023-10-16 18:27:26 +08:00
@TESTFLIGHT2021 new 那是堆空间当然没问题
|
10
daimiaopeng 2023-10-17 10:33:24 +08:00
vs 在项目设置里面有
|
11
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 ); |
12
TESTFLIGHT2021 OP @lff0305 创建的线程 stack 和主线程可以不一样?
|