60 {
61
62
63
64
65 std::string str_stack;
66
67#ifdef _OPENMP
68
69#if defined(__INTEL_COMPILER) || defined(__INTEL_LLVM_COMPILER)
70
71
72 size_t stack_size = kmp_get_stacksize();
73 if (stack_size < 262144000){
74 stack_size = 262144000;
75 kmp_set_stacksize(stack_size);
76 }
77 size_t stack_mb = stack_size /1048576;
78 str_stack = std::to_string(stack_mb)+" MB";
79
80#else
81
82
83
84
85 const char* env_stack_size = std::getenv("OMP_STACKSIZE");
86
87 if ( env_stack_size == NULL) {
88 str_stack = "0 MB";
89
90 }else{
91 char last_char = env_stack_size[strlen(env_stack_size)-1];
92
93 if (last_char == 'G' || last_char == 'g' || last_char == 'M' || last_char == 'm' || last_char == 'K' || last_char == 'k'){
94 char *stack_size = strdup(env_stack_size);
95 stack_size[strlen(stack_size)-1] = '\0';
96 try{
97 int stack_size_int = std::stoi(stack_size);
98 str_stack = std::to_string(stack_size_int)+" "+last_char+"B";
99 }
100 catch (...){
101 str_stack = "0 MB";
102 }
103 }else{
104 try{
105 int stack_size_int = std::stoi(env_stack_size)/1024;
106 str_stack = std::to_string(stack_size_int)+" MB";
107 }
108 catch (...){
109 str_stack = "0 MB";
110 }
111 }
112 }
113
114#endif
115
116#else
117 str_stack = std::string("0");
118#endif
119
120
121
122
123#ifdef _WIN64
124
125
126 std::string stsize;
127
128
129
130 HMODULE Program= GetModuleHandle(NULL);
131 if(Program != NULL) {
132 IMAGE_DOS_HEADER* pDOSHeader = (IMAGE_DOS_HEADER*)Program;
133 IMAGE_NT_HEADERS* pNTHeaders =(IMAGE_NT_HEADERS*)((BYTE*)pDOSHeader + pDOSHeader->e_lfanew);
134 PIMAGE_OPTIONAL_HEADER pOptionalHeader = &pNTHeaders->OptionalHeader;
135 DWORD stack=pOptionalHeader->SizeOfStackReserve /(1024*1024);
136 stsize = std::to_string(stack) + " MB";
137 }else{
138 stsize = "-1 MB";
139 }
140 strcpy_s(
stacksize, 128, stsize.c_str());
141#else
142
143
144 struct rlimit rl;
145 int result = getrlimit(RLIMIT_STACK, &rl);
146 if (result == 0){
147 if (rl.rlim_cur == -1){
149 }else{
150 long int StMB = rl.rlim_cur / (1024*1024);
152
153 rl.rlim_cur = rl.rlim_max;
154 setrlimit(RLIMIT_STACK, &rl);
155 }
156 }else{
158 }
159#endif
160
161#ifdef _WIN64
163#else
165#endif
166}