• We’re currently investigating an issue related to the forum theme and styling that is impacting page layout and visual formatting. The problem has been identified, and we are actively working on a resolution. There is no impact to user data or functionality, this is strictly a front-end display issue. We’ll post an update once the fix has been deployed. Thanks for your patience while we get this sorted.

Mmemory usage of function in object in c++

Carlis

Senior member
Hi

I am implementing a data structure that consists of a large network of nodes with pointers between them. I am memory bound, so I like to reduce the memory footprint.

These nodes are all of the same class. Now, the nodes have some data fields that cost memory.
I consider replacing the fields with some methods to compute the data on the fly.

Now the question is: If I have a single class for the nodes, and add some methods, then clearly they take up some memory. But will I pay this memory for every node?

Best
//
Johan
 
FYI, sizeof( classname ) will tell you exactly how big an object is if you want to see the effect of changing the field types or replacing them with functions to compute the value.
 
How large is a "large network"? Are the nodes accessed in a pattern that's somewhat predictable?

If the network is significantly larger than the CPU cache and you're just allocating nodes off of the heap with new, odds are pretty decent that you're causing cache thrashing. It might worth your time to see if you can restructure allocations so there is better locality as you access nodes. This is a fairly hot topic in game design, you can google data oriented game design to find articles and ideas.
 
I agree with Merad.

Data transmission is a real time sink, if you can avoid it, try limiting the amount and frequency that you put bits on the line. You want to do as much processing locally as possible to get the best utilization of resources.

Further, you get more CPU bang for the buck if you make sure that memory is stored in the same locality. This optimizes CPU cache which can be a big performance boon. More desperate tricks involve specific cache timing instructions, code/data alignment, and SIMD instructions. Go there for getting the most number crunching power you can from your CPU.

You really are going to want to do some memory dumps and analysis. That will give you a good idea of exactly where you are spending your memory. It will give you the best bet for reducing memory usage.

You may also want to use a non-standard allocator like jemalloc. This can help improve allocation speed in multithreaded environments (if that is where you are at).

Finally, you may consider giving a Rust a chance 🙂. The language makes strong memory safety guarantees and is just generally written to be fairly memory friendly. I don't know that I could in good faith recommend it if this is a super serious mission critical sort of a thing. But for minor/toy projects or even semi serious stuff, it isn't a bad choice.
 
Back
Top