4 votes

Définir la taille de la pile avec g++-9 n'a aucun effet

Je construis un programme de test avec g++ 9.3.0 sur Ubuntu 18.04 x64 en utilisant cette commande d'édition de liens :

/usr/bin/g++-9  -O3 -DNDEBUG  -Wl,-z,stack-size=268435456 CMakeFiles/af.dir/main.cpp.o  -o af

Je teste l'augmentation des exigences de la pile avec cette fonction :

float f() {
  float a[3'000'000];
  return a[42];
}

et les résultats indiquent une pile standard de 8 Mo, quelle que soit l'option choisie. stack-size valeur de l'option de liaison. Quel est le moyen d'augmenter la taille de la pile ?

EDIT

Le test est le suivant :

  • float a[3'000'000]; causes Segmentation fault (core dumped)
  • float a[2'000'000]; renvoie à 0 comme prévu

0voto

Paul Jurczak Points 1097

Il semble que le réglage de la taille de la pile avec les options du linker de g++ 9.3.0 sur Ubuntu 18.04 x64 ne soit pas possible. Comme suggéré dans les commentaires, j'ai opté pour une option d'exécution :

#include <sys/resource.h>
#include <fmt/format.h>

int main() {
  if (struct rlimit rl{1<<28, 1l<<33}; setrlimit(RLIMIT_STACK, &rl))
    fmt::print("Can not set stack size! (errno = {})\n", errno);
  else
    fmt::print("Stack size: {}MiB up to {}GiB\n", rl.rlim_cur/(1<<20), rl.rlim_max/(1<<30));
...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X