简体   繁体   中英

Memory usage doesn't increase when allocating memory

I would like to find out the amount of bytes used by a process from within a C++ program by inspecting the operating system's memory information. The reason I would like to do this is to find a possible overhead in memory allocation when allocating memory (due to memory control blocks/nodes in free lists etc.) Currently I am on mac and am using this code:

#include <mach/mach.h>
#include <iostream>

int getResidentMemoryUsage() {
    task_basic_info t_info;
    mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;

    if (task_info(mach_task_self(), TASK_BASIC_INFO,
reinterpret_cast<task_info_t>(&t_info),
                  &t_info_count) == KERN_SUCCESS) {

        return t_info.resident_size;
    }
    return -1;
}


int getVirtualMemoryUsage() {
    task_basic_info t_info;
    mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;

    if (task_info(mach_task_self(), TASK_BASIC_INFO,
reinterpret_cast<task_info_t>(&t_info),
                  &t_info_count) == KERN_SUCCESS) {

        return t_info.virtual_size;
    }
    return -1;
}

int main(void) {
  int virtualMemoryBefore = getVirtualMemoryUsage();
  int residentMemoryBefore = getResidentMemoryUsage();

  int* a = new int(5);

  int virtualMemoryAfter = getVirtualMemoryUsage();
  int residentMemoryAfter = getResidentMemoryUsage();

  std::cout << virtualMemoryBefore << " " << virtualMemoryAfter << std::endl;
  std::cout << residentMemoryBefore << " " << residentMemoryAfter << std::endl;

  return 0;
}

When running this code I would have expected to see that the memory usage has increased after allocating an int. However when I run the above code I get the following output:

75190272 75190272
819200 819200

I have several questions because this output does not make any sense.

  1. Why hasn't either the virtual/resident memory changed after an integer has been allocated?

  2. How come the operating system is allocating such large amounts of memory to a running process.

When I do run the code and check activity monitor I find that 304 kb of memory is used but that number differs from the virtual/resident memory usage obtained programmatically.

  1. My end goal is to be able to find the memory overhead when assigning data, so is there a way to do this (ie determine the bytes used by the OS and compare with the bytes allocated to find the difference is what I am currently thinking of)

Thank you for reading

The C++ runtime typically allocates a block of memory when a program starts up, and then parcels this out to your code when you use things like new , and adds it back to the block when you call delete . Hence, the operating system doesn't know anything about individual new or delete calls. This is also true for malloc and free in C (or C++)

First you measure number of pages, not really memory allocated. Second the runtime pre allocates few pages at startup. If you want to observe something allocate more than a single int. Try allocating several thousands and you will observe some changes.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM