Krautkanal.com

Veröffentlicht am 2015-04-24 14:14:48 in /prog/

/prog/ 7023: db-API?

steynviljoen Avatar
steynviljoen:#7023

Der Index zu den meisten Daten dürfte ja häufig komplett in den Arbeitsspeicher passen...

sowasgehtnichtwirklich.c


#include <string.h> // ?
#include <dblib> // mir nicht bekannt

#define count 100
#ifdef height_enum

int n[count];
db_type db;

int getData(int age) {
dbrecorditerator r = db.selector(height_enum).upper_bound(1.30); // Meter
int i = 0;
while(r.next() != dbrecorditerator.end()) {
if(r->age == age) i++; // nur wenige leute unter 1,30m und älter als 20
}
return i;
}

int main(void) {
db = db_open(wieauchimmer);
int (*fn)(int) = &getData;

memset( n, 0, count );
int age = 20;
for( ; age < count; age++ ) {
printf( "%i: %i\n", i, db.get( fn(i) ));
}
return 0;
}
#endif

tereshenkov Avatar
tereshenkov:#7024

Um was geht es IDF? Suchst du eine In-Memory-Datenbank wie z.B. WhiteDB?

Übrigens:
Da fehlt ein #include <stdio.h> für printf(), memset( n, 0, count ); ist überflüssig, da n aufgrund seiner Speicherdauer (static) bereits initialisiert wurde und du solltest vorzugsweise Integer (in cm) statt Fließkommazahlen für die Höhe verwenden (schlechter Stil).

otozk Avatar
otozk:#7026

>>7024
Sieht auf den erstem Blick gut aus. Die Funktionsparameter könnten noch dokumentiert werden, wenn die API beibehalten wird.

Ein C++-Wrapper könnte 'ne Idee sein, aber mit Templates würde der evtl. 'nen Code-Bloat (ich glaub', das nennt man so. Viel Maschinencode, so dass L1 und L2 Cache nicht so viel nützen).

mr_arcadio Avatar
mr_arcadio:#7027

>>7024
hab nochmal reingeschaut - bei dem "recordcheck"-Macro bin ich mir nicht sicher, ob es für Bufferoverflow-Angriffe mißbraucht werden kann.

gretacastellana Avatar
gretacastellana:#7028

>>7027
all glory to the hypnotoad.

sreejithexp Avatar
sreejithexp:#7037

>>7026
Die Compiler-Bauer achten teilweise auch auf Branch-Prediction und Pipelining. Wie es da mit 'volatile'-Daten (also nicht Cachen sondern immer den Arbeitsspeicherinhalt verwenden) aussieht, weiß ich nicht.

terryxlife Avatar
terryxlife:#7038

>>7037
Gerade eingefallen: MESI (Modified, Exclusive, Shared, Invalid) gibt es auch noch... ich hab' keine Ahnung, welche Compiler das sinnvoll nutzen. Bei dem von Intel würd' ich das ja vermuten.

sindresorhus Avatar
sindresorhus:#7039

>>7038
Der von Intel dürfte Geld kosten - Produkthaftungsgesetz und/oder Patente.

Neuste Fäden in diesem Brett: