В качестве примера при использовании двойного типа следующее выражение будет, по крайней мере, 8008 байтов, приведенных 1001 удвоение (vars x и v):
Код: Выделить всё
var x := 123; var v[1000] := [1]; sum(2 * v / x);
< /code>
Примерно так, как работает мой поток загрузки: < /p>
typedef exprtk::symbol_table symbol_table_t;
typedef exprtk::expression expression_t;
typedef exprtk::parser parser_t;
std::vector expressionsList;
while (online)
{
std::string newExprString = getNextExpression(transportConext);
expression_t newExpression;
newExpression.register_symbol_table(globalSymbolTable);
auto usedResidentMemoryBefore = System::Utils::getResidentMemoryUsed();
if (!parser.compile(newExprString,newExpression))
{
handleCompilationError(oarser,newExprString);
continiue;
}
auto usedResidentMemoryAfter = System::Utils::getResidentMemoryUsed();
if ((usedResidentMemoryAfter - usedResidentMemoryBefore) > maxMemoryLimit)
{
handleExpressionError(newExprString);
continue;
}
// all is good add new expression
expressionList.push_back(newExpression);
}
Эта одновременно, что приведет к тому, что ложные срабатывания и негативы проходят или проваливают проверку. /> Короче говоря, я хочу отказаться от выражений, которые при составлении потребуют больше, чем заданный предел в памяти. < /p>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ing-exprtk
Мобильная версия