c ++ - Standard stakstørrelse

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan jeg øge stakken størrelse i kode :: blokke?


Jeg har læst dette, og det siger, at standard stakstørrelse i VS er 1 MB. Nu har jeg ikke noget med VS at gøre, og stakken er OS afhængig. I mit win10-tilfælde er det 1 MB. ]]


Dette virker lidt forældet som følgende: project->build options->linker settings->other linker options eksisterer ikke mere. [8]


Der er ingen opbygning under projektlinjen.


Anyway, jeg har brug for at øge min stakken størrelse, så jeg kan erklære en enorm to-dimensionelle char array og drage fordel af cache. Ligesom arr[1000][1000]. Som det vil være på sammenhængende hukommelse i modsætning til char* arr[100], som vil pege på 1000 forskellige hukommelsesadresser indeholdende 1000 bytes.


Jeg bruger Windows 10 mingw compiler.

Bedste reference


Standardstørrelsen kommer fra .exe, ikke OS.


Fra MSDN: [9]



  Standardstørrelsen for den reserverede og oprindeligt indledte stakkens hukommelse
  er angivet i den eksekverbare filoverskrift.



Specifikt er stakreserven og bindestørrelsen angivet i strukturen IMAGE\_OPTIONAL\_HEADER i en PE-fil. Dette kan normalt indstilles til en bestemt værdi med en linker parameter. Med MinGW toolchain kan du prøve noget som -Wl,--stack,52428800 som en gcc parameter. Denne mulighed kan forekomme i den IDE du bruger, bare se efter build og/eller linker indstillinger. [10]


Dette gælder for den første tråd, andre tråde kan tilsidesætte standardværdien, hvis du angiver en værdi, der ikke er nul, når du ringer til CreateThread.