Похоже, что есть некоторая O (n ^ k) часть VC ++ с k> 1 при разборе инициализаторов массива ...
Это квалифицируется как логическая ошибка, с которой вы ничего не можете поделать, но что-то, что может работать, является
unsigned char bdata[][100] = {
{ 0x01, 0x02, ... , 0x63} ,
{ 0x64, 0x65, ... , 0xC7} ,
{ 0xC8, 0xC9, ... , 0x2B} ,
...
};
unsigned char *data = &(bdata[0][0]);
, который разбивает данные на 100-байтовые строки ... МОЖЕТ БЫТЬ VC будет анализировать / компилировать намного быстрее (просто подозрение, что я дал симптомы), и это не должно значительно измените процесс сборки.
Я не использую VC ++ 2010, поэтому не могу проверить.
Просто обратите внимание, что sizeof (data) в этом случае будет просто размером указателя, а sizeof (bdata) будет вместо размера изображения, но будет округлено до кратного размера строки .
Если эта версия работает с той же скоростью, к сожалению, код равен O (n ^ k) в количестве байтов, и вы в основном обречены, если хотите, чтобы это было скомпилировано как массив.
Другим вариантом может быть использование огромного строкового литерала ... с этим компилятор может работать лучше (возможно, они закодировали специальный путь кода для строковых литералов, потому что "большие" литералы не так уж и редки), но ваш генератор кода будет должны обрабатывать экранирование специальных символов.