I should probably say, what did I mean by those bugs and everything, now. ... Hmmm....

Ok ok, I remember.
CvUnit.cpp:30423
I believe it should be
Code:
iBestCommanderDistance > iDistance ||
It will probably fix the bug I pointed earlier about choosing not the best general.
About minimizing plots, one thing is
CvPlot.h:363-365
There are not too many landmarks on the map, but each plot takes 68 bytes for them. I believe 2 or even 1 + a global array would do the job.
And the other, which hits much more then plots
CvStructs.h:147
If I understand correctly, PlayerType is just player's id. If so, I believe the game can't stand even 255 players, so it would be enough to allocate 1 byte for this. -- enum, if nothing changed in vs2003, has 4.
But I believe the whole IDInfo is a bad idea. If there can be millions of calls of getCommander, then how many selections of units and other objects are there? And each one needs to select the player object, check the ranges of the array and then select the object. It is horrifying much work for just getting to an object. I think, all those IDInfo-s should be switched to pointers. -- I know, deleting an objects in such case may be not trivial, but there are ways to do it. I still do not know statistics, but I think there is a chance, it would speed up enormously the game.