cacophonix's blog

By cacophonix, 9 years ago, In English

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).

  • Vote: I like it
  • +53
  • Vote: I do not like it

»
9 years ago, # |
  Vote: I like it 0 Vote: I do not like it

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;
  • »
    »
    9 years ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    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?

  • »
    »
    9 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

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

»
9 years ago, # |
  Vote: I like it +8 Vote: I do not like it

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 years ago, # ^ |
      Vote: I like it +6 Vote: I do not like it

    Because it is not linux. However stack size is large enough on codeforces.

»
9 years ago, # |
  Vote: I like it 0 Vote: I do not like it

I am shocked, Codeforces servers are not linux XD

»
9 years ago, # |
  Vote: I like it 0 Vote: I do not like it

is there any danger of doing it?

  • »
    »
    9 years ago, # ^ |
      Vote: I like it +2 Vote: I do not like it

    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).