Storing the genre in an std::list will actually consume at least 2*(sizeof(void*)) + sizeof(int) bytes per entry. It's stored on the heap, so it also needs allocation overhead, so I estimate that storing that data will cost more like 20 bytes per event. That's slightly more than your estimation of 2..4 bytes.
And before committing this, I'd like to see it actually put to use. The epgcache is already the biggest memory hog on the box, if we're gonna make it hog even more, it better be for a good reason. Until proven wrong, I estimate that 95% of the providers don't bother to supply this at all, or supply wrong information. So I'd like to see some "proof" that this is actually useful.
Step 1: Reduce your memory footprint (I can forewarn you that a std::vector consumes about 16 bytes too).
Step 2: Show that it's really useful.
You are looking at the memory foot print for storing the actual parsed event.
Epgcache does not store the data this way.
The portion you are looking at is when we find an event we are interested in, we parse that event which creates the object in question that has this list. So its not as bad as what you are stating.
Ofcourse the foot print of these objects could be reduced if needed.
If you want to look at the memory usage of this data then we have the following.
For a list of 5 channels displaying 2 hours of data and say you have 5 minutes programs on each of those channels. Then you would have a 120 events * 20 bytes 2400 bytes of data being used for that data display a list like that.
I already have a modified version of GraphMultiEpg to make use of some of this data, but I will make some changes to make more useful use of this data.