рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рд░рд▓ рдФрд░ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ -
рдмреАрдбреЗрд▓реНрдЯрд╛ , рдФрд░ рдпрд╣ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЗрд╕рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╣рдорд╛рд░реА рдЙрддреНрдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬрдбрд╝ рд▓реА (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдВрддрд┐рдо рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдерд╛)ред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ - рдмрд╛рдЗрдирд░реА рдкреИрдЪ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рдпрджрд┐ рдЖрдк рджреЗрдЦреЗрдВ рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рджреБрдЦрдж рд╣реИ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╡рд╣рд╛рдВ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рдерд╛ (рдПрдХ рдмрд╛рд░ рдореЗрд░реЗ рдкреВрд░реНрд╡ рд╕рд╣рдпреЛрдЧреА рдиреЗ рд╡рд╣рд╛рдВ рдХрдИ рд╕реБрдзрд╛рд░ рдХрд┐рдП рдереЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдерд╛)ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдореИрдВрдиреЗ рдХрд╛рдВрдЯрд╛ рдХрд┐рдпрд╛, рдЬреЛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдереА, рдЙрд╕реЗ
рд╕реАрдореЗрдХ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЧрдпрд╛, "рд╣реЙрдЯ" рдорд╛рдЗрдХреНрд░реЛрдлрдВрдХреНрд╢рди рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд┐рдпрд╛, рд╕реНрдЯреИрдХ рд╕реЗ рдмрдбрд╝реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ (рд╕реНрдЯреИрдХ рдФрд░ рд╡реИрд░рд┐рдПрдмрд▓-рд▓рдВрдмрд╛рдИ рд╕рд░рдгрд┐рдпреЛрдВ, рдЬрд┐рд╕реЗ рдореИрдВ рдЦреБрд▓рдХрд░ "рдмрдордмрд╛рд░реА" рд╕реЗ)ред , рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ - рдФрд░ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд▓рдЧрднрдЧ 40% рд╕рдордп
рдлреЗрд░реАрд░рд╛рдЗрдЯ рдкрд░ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИ ...
рддреЛ рдХреНрдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рде рд╣реИ?
рдЗрд╕ рдХреЛрдб рдореЗрдВ, fwrite (рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдореЗрдВ: рдХрд░реАрдм 300 рдПрдордмреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдкреИрдЪ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд╣реИ) рдПрдХ рдЫреЛрдЯреЗ рдмрдлрд░ рдХреЗ рд╕рд╛рде рд▓рд╛рдЦреЛрдВ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдмрд╛рдд рдзреАрдореА рд╣реЛ рдЬрд╛рдПрдЧреА, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЗрд╕ рдЕрдкрдорд╛рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЖрд╕рд╛рди рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдИ рд╡рд╣ рдереА рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдирд╛
setvbuf(file, nullptr, _IOFBF, 64* 1024)
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ (рдЕрдм fwrite рдХрд╛ рд╕рдордп рд▓рдЧрднрдЧ 37% рдерд╛) - рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдЕрднреА рднреА рдбрд┐рд╕реНрдХ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИред "рд╣реВрдб рдХреЗ рддрд╣рдд" рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓реЙрдХ / рдЕрдирд▓реЙрдХ FILE рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛ рд░рд╣реА рд╣реИ (рдЫрджреНрдо рдХреЛрдб, рд╕рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2017 рдХреЗ рддрд╣рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛):
size_t fwrite (const void *buffer, size_t size, size_t count, FILE *stream) { size_t retval = 0; _lock_str(stream); __try { retval = _fwrite_nolock(buffer, size, count, stream); } __finally { _unlock_str(stream); } return retval; }
рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, _fwrite_nolock рдХреЗрд╡рд▓ 6% рд╕рдордп рдХреЗ рд▓рд┐рдП рд╣реИ, рдмрд╛рдХреА рдУрд╡рд░рд╣реЗрдб рд╣реИред рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рдереНрд░реЗрдб рд╕реЗрдлреНрдЯреА рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИ, рдореИрдВ рдЗрд╕реЗ
ffite рдХреЙрд▓ рдХреЛ
_fwrite_nolock рд╕реЗ рдмрджрд▓рдХрд░ рдмрд▓рд┐рджрд╛рди рдХрд░
рджреВрдВрдЧрд╛ - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рднреА
рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЭреЗ
рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреБрд▓: рдХрдИ рдмрд╛рд░ рдЗрд╕ рд╕рд░рд▓ рд╣реЗрд░рдлреЗрд░ рдиреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛, рдЬреЛ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓рдЧрднрдЧ рдЖрдзреЗ рд╕рдордп рдХреА рд▓рд╛рдЧрдд рдереАред рд╡реИрд╕реЗ, POSIX рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рд╣реИ -
fwrite_unlocked ред рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рддреЗ рд╣реБрдП, рд╡рд╣реА рдлрд╝реНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, #define рдЬреЛрдбрд╝реА рдХреА рдорджрдж рд╕реЗ, рдпрджрд┐ рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмрд┐рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рддрд╛рд▓реЗ рдХреЗ рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдРрд╕рд╛ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ)ред
fwrite, _fwrite_nolock, setvbuf
рдЖрдЗрдП рдореВрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЕрдореВрд░реНрдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░реЗрдВ: рдЕрддреНрдпрдВрдд рдЫреЛрдЯреЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ (512 рдПрдордмреА) рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ - 1 рдмрд╛рдЗрдЯред рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА: AMD Ryzen 7 1700, 16 GB RAM, HDD 3.5 "7200 rpm 64 рдПрдордмреА рдХреИрд╢, рд╡рд┐рдВрдбреЛрдЬ 10 1809, рдмрд┐рдирд╛рд░ 32-рдмрд┐рдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдиреБрдХреВрд▓рди рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛:
#include <chrono> #include <cstdio> #include <inttypes.h> #include <memory> #ifdef _MSC_VER #define fwrite_unlocked _fwrite_nolock #endif using namespace std::chrono; int main() { std::unique_ptr<FILE, int(*)(FILE*)> file(fopen("test.bin", "wb"), fclose); if (!file) return 1; constexpr size_t TEST_BUFFER_SIZE = 256 * 1024; if (setvbuf(file.get(), nullptr, _IOFBF, TEST_BUFFER_SIZE) != 0) return 2; auto start = steady_clock::now(); const uint8_t b = 77; constexpr size_t TEST_FILE_SIZE = 512 * 1024 * 1024; for (size_t i = 0; i < TEST_FILE_SIZE; ++i) fwrite_unlocked(&b, sizeof(b), 1, file.get()); auto end = steady_clock::now(); auto interval = duration_cast<microseconds>(end - start); printf("Time: %lld\n", interval.count()); return 0; }
рдЪрд░ TEST_BUFFER_SIZE рд╣реЛрдВрдЧреЗ, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо fwrite_unlocked рдХреЛ fwrite рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗред рдЖрдЗрдП рдмрдлрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ fwrite рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ (setvbuf рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ): рд╕рдордп 27048906 ╬╝s, рдЧрддрд┐ рд▓рд┐рдЦреЗрдВ - 18.93 рдПрдордмреА / рдПрд╕ред рдЕрдм рдмрдлрд░ рдЖрдХрд╛рд░ рдХреЛ 64 Kb: рд╕рдордп - 25037111 ╬╝s, рдЧрддрд┐ - 20.44 Mb / s рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдЕрдм рд╣рдо рдмрд┐рдирд╛ рдХреЙрд▓ рдХрд┐рдП рд╕реЗрдЯ _bwrite_nolock рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ: 7262221 ms, рдЧрддрд┐ 70.5 Mb / s рд╣реИ!
рдЕрдЧрд▓рд╛, рдмрдлрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ (рд╕реЗрдЯрд╡реНрдпреВрдл):

рдбреЗрдЯрд╛ рдФрд╕рдд 5 рдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ред рдореЗрд░реЗ рд▓рд┐рдП, 93 рдПрдордмреА / рдПрд╕ рдЬрдм рдПрдХ рдирд┐рдпрдорд┐рдд рдПрдЪрдЯреАрдбреА рдХреЛ 1 рдмрд╛рдЗрдЯ рд▓рд┐рдЦрдирд╛ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рддреЛ рдмрд╕ рдЗрд╖реНрдЯрддрдо рдмрдлрд░ рдЖрдХрд╛рд░ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ 256 рдХреЗрдмреА - рдмрд╕ рджрд╛рдПрдВ) рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдлрд╝рд░реНрд╡рд╛рдЗрдЯ рдХреЛ _fwrite_nolock / fyite_unlocked (рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ) рдпрджрд┐ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ)ред
рдЗрд╕реА рддрд░рд╣ рдХреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднрдп рдХреЗ рд╕рд╛рдеред рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: рдПрдПрдордбреА рд░рд╛рдЗрдЬрд╝реЗрди 7 1700X, 16 рдЬреАрдмреА рд░реИрдо, рдПрдЪрдбреАрдбреА 3.5 "7200 рдЖрд░рдкреАрдПрдо 64 рдПрдордмреА рдХреИрд╢, рдУрдкрдирдПрд╕рдпреВрдПрд╕рдИ 15 рдУрдПрд╕, рдЬреАрд╕реАрд╕реА 8.3.1, рд╣рдо x86-64 рдмрд┐рдирд╛рд░, рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ ext4 рдкрд░реАрдХреНрд╖рдг рдЕрдиреБрднрд╛рдЧ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдмрдлрд░ рдЖрдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ fwrite рдХрд╛ рдкрд░рд┐рдгрд╛рдо 67.6 Mb / s рд╣реИ, рдЬрдм рдмрдлрд░ рдХреЛ 256 Kb рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдмрдврд╝ рдХрд░ 69.7 Mb / s рд╣реЛ рдЧрдИ рд╣реИред рдЕрдм рд╣рдо fwrite -unlocked рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдорд╛рдк рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗ - рдкрд░рд┐рдгрд╛рдо рдХреНрд░рдорд╢рдГ 93.5 рдФрд░ 94.6 Mb / s рд╣реИрдВред 1 рдХреЗрдмреА рд╕реЗ 8 рдПрдордмреА рддрдХ рдХреЗ рдмрдлрд░ рд╕рд╛рдЗрдЬрд╝ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реБрдП рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рддрдХ рд▓реЗ рдЧрдП: рдмрдлрд░ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рд▓реЗрдЦрди рдХреА рдЧрддрд┐ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдВрддрд░ рдХреЗрд╡рд▓ 3 рдПрдордмреА / рдПрд╕ рдерд╛, рдореБрдЭреЗ 64 рдХреЗрдмреАрдкреАрдПрд╕ рдФрд░ 8 рдмрдлрд░ рдХреЗ рдмреАрдЪ рдХреА рдЧрддрд┐ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирдЬрд░ рдирд╣реАрдВ рдЖрдпрд╛ред рдЗрд╕ рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдкрд░ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рд╕реЗ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:
- fwrite_unlocked, fwrite рд╕реЗ рддреЗрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд┐рдЦрдиреЗ рдХреА рдЧрддрд┐ рдореЗрдВ рдЕрдВрддрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЙрддрдирд╛ рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ
- рд▓рд┐рдирдХреНрд╕ рдкрд░ рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЧрддрд┐ рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ fwrite / fwrite_unlocked рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рд╣реИ
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ рдкрд░ рднреА (рдмрд╣реБрдд рдХрдо рд╕реАрдорд╛ рддрдХ) рдкреНрд░рднрд╛рд╡реА рд╣реИред
рдЕрдВрддрднрд╛рд╖рдг
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдФрд░ рдкреНрд░рднрд╛рд╡реА рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдерд╛ (рдореИрдВ рдкрд╣рд▓реЗ _fwrite_nolock / fwrite_unlocked рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛, рд╡реЗ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИрдВ - рд▓реЗрдХрд┐рди рд╡реНрдпрд░реНрде рдореЗрдВ)ред рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред