• 请不要在回答技术问题时复制粘贴 AI 生成的内容
TESTFLIGHT2021
V2EX  ›  程序员

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

  •  
  •   TESTFLIGHT2021 · Oct 16, 2023 · 2306 views
    This topic created in 1118 days ago, the information mentioned may be changed or developed.
    如题,请教一下~~
    12 replies  •  2023-10-17 11:32:25 +08:00
    tool2d
    tool2d
    Oct 16, 2023
    1
    stack 肯定有啊,编译器参数里就有。heap 一般是系统维护的,不能自己设置。

    感觉问一下 gpt ,比发帖等回复要快。
    tool2d
    tool2d
    Oct 16, 2023
    3
    @cnbatch 感觉 windows 设置堆大小没意义吧。内存页面增长大小都是 OS 进行管理的,exe 总占用内存也是系统剩余内存多少决定的。
    cnbatch
    cnbatch
    Oct 16, 2023
    4
    @tool2d 大多数情况下,确实没谁想过设置堆的值,只是 OP 想故意设限,那就由他吧╮(╯-╰)╭
    TESTFLIGHT2021
    TESTFLIGHT2021
    OP
    Oct 16, 2023
    5
    @tool2d 32 位应用寻址空间<4G stack 起始 结束 应该有限制吧
    TESTFLIGHT2021
    TESTFLIGHT2021
    OP
    Oct 16, 2023
    6
    @cnbatch https://learn.microsoft.com/en-us/cpp/build/reference/stack-stack-allocations?view=msvc-170 按照这个 stack 大小是 1MB 但是实际好像没管过这个,或者可能超过这个值了,好像也没问题啊?
    cnbatch
    cnbatch
    Oct 16, 2023
    7
    @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
    OP
    Oct 16, 2023
    8
    @cnbatch 我试试 我平日都是 new delete new 有时候好几 MB 的空间。。。好像也没出问题
    liuhan907
    liuhan907
    Oct 16, 2023
    9
    @TESTFLIGHT2021 new 那是堆空间当然没问题
    labubu
    labubu
    Oct 17, 2023
    10
    vs 在项目设置里面有
    lff0305
    lff0305
    Oct 17, 2023
    11
    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
    TESTFLIGHT2021
    OP
    Oct 17, 2023
    12
    @lff0305 创建的线程 stack 和主线程可以不一样?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1516 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 01:23 · PVG 09:23 · LAX 17:23 · JFK 20:23
    ♥ Do have faith in what you're doing.