Begrenzen Sie den großen Ausdruck bei der Verwendung von EXPRTK zusammengestelltC++

Programme in C++. Entwicklerforum
Anonymous
 Begrenzen Sie den großen Ausdruck bei der Verwendung von EXPRTK zusammengestellt

Post by Anonymous »

Currentyy In meinem Projekt verwende ich exprtk, um eine große Anzahl von Ausdrücken zu laden, die zu einem späteren Zeitpunkt bewertet werden. Einige der Ausdrücke kommen lokal, andere stammen aus externen Quellen. Ich möchte jedoch keine Ausdrücke laden/kompilieren, die eine große Menge an Speicher benötigen.

Code: Select all

var x := 123; var v[1000] := [1];  sum(2 * v / x);
< /code>
Folgendes ist ungefähr, wie mein Lade -Thread funktioniert: < /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);

}
Der Expressionstyp von Exprtk hat keine Größenmethode zum Aufrufen, um zu erkennen, wie viel Gedächtnis ist. Ich verwende also eine Funktion, die den Gedächtnis des Verfahrens des Prozesses vor und nach den Kompilierungsschritten nennt. Gleichzeitig führt dies zu falsch positiven und negativen Negativen, die den Scheck durchlaufen oder nicht. /> Kurz gesagt, ich möchte Ausdrücke fallen lassen, die beim Zusammenstellen mehr als eine gegebene Grenze im Speicher benötigen. < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post