gettimeofday(&time_end, 0);
getrusage(RUSAGE_SELF, &r);
- printf(_("Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n"),
- (int) (((char *) sbrk(0)) - ((char *) track->brk_start)),
+ printf(_("Memory used: %lu, elapsed time: %6.3f/%6.3f/%6.3f\n"),
+ (unsigned long)((char *)sbrk(0) - (char *)track->brk_start),
timeval_subtract(&time_end, &track->time_start),
timeval_subtract(&r.ru_utime, &track->user_start),
timeval_subtract(&r.ru_stime, &track->system_start));
{
#ifdef HAVE_GETRUSAGE
struct rusage r;
-#endif
-#ifdef HAVE_MALLINFO
- struct mallinfo malloc_info;
#endif
struct timeval time_end;
if (desc)
log_out(ctx, "%s: ", desc);
+#define kbytes(x) (((unsigned long long)(x) + 1023) / 1024)
#ifdef HAVE_MALLINFO
-#define kbytes(x) (((unsigned long)(x) + 1023) / 1024)
-
- malloc_info = mallinfo();
- log_out(ctx, _("Memory used: %luk/%luk (%luk/%luk), "),
- kbytes(malloc_info.arena), kbytes(malloc_info.hblkhd),
- kbytes(malloc_info.uordblks), kbytes(malloc_info.fordblks));
-#else
- log_out(ctx, _("Memory used: %lu, "),
- (unsigned long) (((char *) sbrk(0)) -
- ((char *) track->brk_start)));
+ /* don't use mallinfo() if over 2GB used, since it returns "int" */
+ if ((char *)sbrk(0) - (char *)track->brk_start < 2ULL << 30) {
+ struct mallinfo malloc_info = mallinfo();
+
+ log_out(ctx, _("Memory used: %lluk/%lluk (%lluk/%lluk), "),
+ kbytes(malloc_info.arena), kbytes(malloc_info.hblkhd),
+ kbytes(malloc_info.uordblks),
+ kbytes(malloc_info.fordblks));
+ } else
#endif
+ log_out(ctx, _("Memory used: %lluk, "),
+ kbytes(((char *)sbrk(0)) - ((char *)track->brk_start)));
+
#ifdef HAVE_GETRUSAGE
getrusage(RUSAGE_SELF, &r);