I have whipped up a quick sketch I'll let you play with,
at the moment, it creates a 30k progmem block.
#define nothing
template< uint64_t C, typename T >
struct LargeStruct{
T Data;
LargeStruct< C - 1, T > Next;
};
template< typename T > struct LargeStruct< 0, T >{ };
typedef LargeStruct< 150, uint32_t > Container; //600 bytes
PROGMEM LargeStruct< 50, Container > l_Struct; //Fills to 30k bytes
void setup()
{
volatile int i = ( int ) &l_Struct;
}
void loop()
{
}
Binary sketch size: 30,748 bytes (of a 258,048 byte maximum)