Hi Daniel,
It is perhaps not surprising that the allocation is linearly related to the number of profiles: the profile member data must be allocated individually for each element of the profiles(:) array, so adding more profiles means more individual allocations.
Allocation can be relatively expensive (system-dependent), but you would typically call the allocation routine(s) once, and then potentially call RTTOV multiple times to process all the profiles.
If you are currently allocating once for all your profiles and then calling RTTOV once to simulate all those profiles, it would be unusual/surprising for the allocation call to be as or more expensive as the simulation call, although it does sound like you are allocating an extremely large number of profiles.
You could consider allocating data for a smaller number of profiles (e.g. 10 or 100) and calling RTTOV multiple times, simulating your profile data in batches.
Best wishes,
James