#include #include #include // Dummy function for system malloc void hak_tiny_magazine_flush_all(void) { /* no-op */ } void battle_test(int n, const char* label) { struct rusage usage; void** ptrs = malloc(n * sizeof(void*)); printf("\n=== %s Test (n=%d) ===\n", label, n); // Allocate for (int i = 0; i < n; i++) { ptrs[i] = malloc(16); } // Measure at peak getrusage(RUSAGE_SELF, &usage); float data_mb = (n * 16) / 1024.0 / 1024.0; float rss_mb = usage.ru_maxrss / 1024.0; float overhead = (rss_mb - data_mb) / data_mb * 100; printf("Peak: %.1f MB data → %.1f MB RSS (%.0f%% overhead)\n", data_mb, rss_mb, overhead); // Free all for (int i = 0; i < n; i++) { free(ptrs[i]); } // Flush (no-op for system malloc) hak_tiny_magazine_flush_all(); // Measure after free getrusage(RUSAGE_SELF, &usage); float rss_after = usage.ru_maxrss / 1024.0; printf("After: %.1f MB RSS (%.1f MB freed)\n", rss_after, rss_mb - rss_after); free(ptrs); } int main() { printf("╔════════════════════════════════════════╗\n"); printf("║ System malloc / mimalloc ║\n"); printf("╚════════════════════════════════════════╝\n"); battle_test(100000, "100K"); battle_test(500000, "500K"); battle_test(1000000, "1M"); battle_test(2000000, "2M"); battle_test(5000000, "5M"); printf("\n╔════════════════════════════════════════╗\n"); printf("║ BATTLE COMPLETE! ║\n"); printf("╚════════════════════════════════════════╝\n"); return 0; }