c ++ - Hurtigste IPC-metode på Windows 7

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad er den hurtigst mulige Interprocess Communication (IPC) metode på Windows 7? Vi vil gerne dele kun en hukommelsesblok (tovejs).


Er det ReadProcessMemory eller noget andet?
Vi vil gerne bruge almindeligt C, men for eksempel, hvad øger biblioteket til IPC?

Bedste reference


ReadProcessMemory bør ikke endda være opført som en IPC-metode, ja det kan bruges som sådan, men det eksisterer hovedsagelig til debugging formål (hvis du tjekker dens reference, er det under kategorien 'Debugging funktioner') , og det er sikkert langsommere end 'rigtig' delt hukommelse, fordi det kopierer hukommelsen til en proces i den angivne buffer, mens den virkelige delte hukommelse ikke har denne overhead.


Den fulde liste over IPC-metoder understøttet af Windows er tilgængelig på MSDN; Hvis du kun har to programmer, der vil dele en hukommelsesblok, skal du dog oprette en navngivet hukommelseskortfil (understøttet af personsøgfilen) med CreateFileMapping/MapViewOfFile, det skal være det mest ligetil og hurtigeste metode. Oplysningerne om filmapping beskrives på sin side på MSDN. [6] [7]


De relevante Boost IPC-klasser kan fungere som en tynd wrapper omkring delt hukommelse. AFAIK inkapsler kun indkaldelserne til de relevante systemspecifikke API'er, men i sidste ende får du den sædvanlige pointer til den delte hukommelsesblok, så operationen skal være så hurtig som bruger de oprindelige API'er. [8]


På grund af dette råder jeg dig til at bruge Boost.Interprocess, da den er bærbar, C ++ -venlig (den giver RAII semantik) og giver dig ingen præstationsbøde, efter at den delte hukommelsesblok er blevet oprettet (den kan giver yderligere funktioner til delt hukommelse, men de er alle opt-in - hvis du bare vil have delt hukommelse, får du bare det). [9]