Я хочу написать что-то вроде этого в файл:Каков наилучший способ (производительность) для преобразования и записи переменных в файл в C++?
0x050 addik r13, r0, 4496
0x054 addik r2, r0, 2224
0x058 addik r1, r0, 7536
0x05c brlid r15, 200
...
И так далее ... Его команда программы трассировки, которая будет иметь тысячи строк.
Я читаю от «эльфа», декодируя инструкцию, создавая объект, задавая его адрес, команду, имя и регистры, а затем записывая его в указанном выше формате в файл.
Что это лучший способ, измеряя скорость/производительность, чтобы это сделать?
Теперь у меня есть это (еще только шестнадцатиричном), и я не знаю, если это лучший способ, чтобы продолжить писать свой код:
Преобразование функции:
static std::string toHex(const T &i) {
std::stringstream stream;
stream << "0x"
<< std::setfill ('0') << std::setw(sizeof(T)*2)
<< std::hex << i;
return stream.str();
};
и письмена:
while((newInstruction = manager->newInstruction())){
stream << Utils::toHex(newInstruction->getAddress())
<< " "
<< Utils::toHex(newInstruction->getInstruction())
<< endl;
trace->writeFile(stream.str());
stream.str(std::string());
}
EDIT:
Так я достиг более быстрое решение, основанное на ответы.
Для одного я реализовал решение, заданное Escualo, чтобы прекратить создавать объекты каждый раз, когда я читаю новую инструкцию.
И затем я прочитал ответ, заданный Thomas Matthews, и дал мне идею не писать в мой файл при каждой прочитанной инструкции, поэтому строковый поток теперь работает как буфер с размером 1024, а когда он превосходит это значение, поток в файл:
while((newInstruction = manager->newInstruction())){
stream << myHex<unsigned int> << newInstruction->getAddress() << ' '
<< myHex<uint32_t> << newInstruction->getInstruction();
if(stream.tellp() > 1024){
trace->writeFile(stream.str());
stream.str(std::string());
}
}
как 'writeFile()' закодирован? – NathanOliver
Что делает скорость/производительность наиболее важным аспектом этого кода (а не читабельность, ремонтопригодность, повторное использование или другие приятные вещи)? Я спрашиваю, потому что, когда скорость _really_ важна, самый быстрый способ записи переменных в файл состоит в том, чтобы напрямую копировать байты (которые не читаются человеком) и запускать более медленную программу позже, когда время уже не самое главное, перевести их для удобочитаемого текста. –
Проблема заключается в том, что ей придется управлять инструкциями по сборке из других программ, которые могут легко получить миллион инструкций, и я должен декодировать каждую инструкцию, которая требует времени, а затем обнаруживает последовательности, которые занимают еще больше времени, а затем пишут все, чтобы файлы. – joaomlap