Блог пользователя cacophonix

Автор cacophonix, 10 лет назад, По-английски

You need to include a header file

#include <sys/resource.h>

and in the main() function you need to write these lines

rlimit R;
getrlimit(RLIMIT_STACK, &R);
R.rlim_cur = R.rlim_max;
setrlimit(RLIMIT_STACK, &R);

thanks(not this line).

  • Проголосовать: нравится
  • +53
  • Проголосовать: не нравится

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I don't see any number specifying new stack size. Is it inifinity? Or do I need to write something like:

rlimit R = some_value;
  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    This line R.rlim_cur = R.rlim_max; does what you're asking about.

    Tried printing the value of R.rlim_max and got 18446744073709551615, so yeah it's probably infinity.

    More info?

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    In my machine, the value of R.rlim_max is 4294967295(Byte). So the stack size is 4GB in my machine.

»
9 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

I tried this, but the Codeforces compiler couldn't find the header.

program.cpp:50:26: fatal error: sys/resource.h: No such file or directory

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I am shocked, Codeforces servers are not linux XD

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

is there any danger of doing it?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +2 Проголосовать: не нравится

    These calls may be forbidden on some online judges or offline competitions, as they're unusual system calls. So, you theoretically can be disqualified, if jury will think that such calls violate competition rules. From practical point of view, you may bump into compilation error or runtime error (for the same reasons — these calls can be banned).