V informatice buffer (z angl . buffer ), pl. h. buffer [1] [2] , buffery [3] [4] je paměťová oblast používaná pro dočasné ukládání dat během vstupu nebo výstupu. Výměna dat (vstup a výstup) může probíhat jak s externími zařízeními, tak s procesy v počítači . Vyrovnávací paměti mohou být implementovány v hardwaru nebo softwaru , ale velká většina vyrovnávacích pamětí je implementována v softwaru. Vyrovnávací paměti se používají, když existuje rozdíl mezi rychlostí, jakou jsou data přijímána, a rychlostí, kterou jsou zpracovávána, nebo když jsou tyto rychlosti proměnlivé, například když je tisk zařazován.
Tyto pojmy se vzájemně nevylučují a jejich funkce jsou často zaměňovány, ale existuje rozdíl v jejich účelu. Vyrovnávací paměť je dočasné úložiště, kde jsou velké bloky dat sloučeny nebo rozděleny na části. To je nezbytné pro interakci s úložným zařízením , které pracuje s velkými bloky dat, nebo když jsou data přenášena v jiném pořadí, než v jakém jsou vytvořena, a je to žádoucí pouze tehdy, když je použití malých bloků neefektivní. Použití vyrovnávací paměti je výhodné, i když jsou data uložená ve vyrovnávací paměti zapsána a čtena z vyrovnávací paměti pouze jednou.
Použití mezipaměti zase znamená, že data budou z mezipaměti častěji čtena, než do ní zapisována. Jeho účelem je snížit počet přístupů do paměti, nikoli je zefektivnit.
Metoda organizace výměny dat mezi zařízeními nebo procesy pomocí vyrovnávací paměti se nazývá vyrovnávací paměť . Jedním z nejznámějších příkladů tohoto použití vyrovnávací paměti pro uživatele PC je schránka v systému Microsoft Windows .
Vyrovnávací paměti se také používají při programování pro příjem dat z funkcí . Funkce rozhraní Windows API , jejichž výsledkem je řetězcová hodnota (například MultiByteToWideChar ), berou jako jeden z argumentů ukazatel na vyrovnávací paměť, která má být odeslána. Zde je příklad fragmentu zdrojového kódu programu C , který převádí řetězec "Hello, World!" v Unicode :
// zdrojový řetězec CHARtext[] = "Ahoj světe!"; // buffer pro získání výsledku WCHAR buffer[256]; // převod řetězce na Unicode MultiByteToWideChar(CP_ACP, 0, text, strlen(text) + 1, buffer, sizeof(buffer)/sizeof(WCHAR));