perlアプリケーションの負荷テストをやっていて関数ごとのメモリ使用量とかみたいけどどうやって出すんだ。Cなら分かるのにって場面があった。Cなら分かるって思ったはいいもののそういえばどうやって出すんだろって思ってサンプル見ながら実装してみた。
ライブラリで使うスタックサイズなんて決められないよ!って話 - Qiita
#include <stdio.h> #include <stdib.h> #define STACK_SIZE (1024 * 1024 * 10) // 10 MB #define MAGIC_NUMBER 'Z' static void *function(void *arg); static void check_stack(char *adr); int main(void) { char *stack_adr = (char *) malloc(STACK_SIZE); for (int i = 0; i < STACK_SIZE; i++) { stack_adr[i] = MAGIC_NUMBER; } pthread_attr_t thread_attr; pthread_attr_init(&thread_attr); pthread_attr_setstack(&thread_attr, (void *) stack_adr, STACK_SIZE); pthread_t thread; pthread_create(&thread, &thread_attr, &function, NULL); pthread_join(thread, NULL); check_stack(stack_adr); free(stack_adr) return 0; } static void *function(void *arg) { char buff[1024 * 100]; // 100KB memset(buff, MAGIC_NUMBER + 1, sizeof buff); return NULL; } static void check_stack(char *adr) { int i; for (i = 0; i < STACK_SIZE; i++) { if (adr[i] != MAGIC_NUMBER) { break; } } printf("Used %d byte\n", STACK_SIZE - i); }