Если хранить данные в структуре, то при начальной инициализации они только будут пустыми и будут аллоцироваться только когда будет происходить вызов соответствующей функции.
А вообще, это же обычный кэш, его можно выделить в отдельный тип, и навесить на него всякие обработчики кеша (типа деаллокации) и вызывать их в нужных местах программы, когда ты знаешь, что тот или иной кусок кэша пора чистить.