
āĻā§āĻŽāĻŋāĻāĻž
āĻĒā§āĻĨāĻŋāĻŦā§āϤ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āϏāĻšāĻ āĻāĻŦāĻ āĻā§āĻŦ āĻĻāϰāĻāĻžāϰ⧠āĻāĻāĻāĻŋāϞāĻŋāĻāĻŋ āϰāϝāĻŧā§āĻā§ - , āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŽāύāĻ āĻāĻā§āĻā§ āϝ⧠āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āϰ āĻāϤā§āĻĒāĻžāĻĻāύ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāϝāĻŧ āĻā§āĻŦ āĻĻā§āϰā§āĻ āϏāĻŽāϝāĻŧā§āϰ āĻāύā§āϝ āĻāĻĄāĻŧāĻŋāϤ āĻāĻŋāϞ (āϝāĻĻāĻŋāĻ āĻāĻāĻŋāϰ āϏāĻāϏā§āĻāϰāĻŖ āĻāύāϏā§āĻāϞ āĻāϰāĻž āϏāĻŽā§āĻāĻŦ āĻāĻŋāϞ āύāĻž, āϤāĻŦā§ āĻāĻāĻŋ āĻ
āĻŦāĻļā§āϝāĻ āĻļā§āώ āĻāĻĒāϞāĻŦā§āϧ āĻāĻŋāϞ āύāĻž)āĨ¤ āĻāĻŽāϰāĻž āĻāĻāĻŋāĻā§ āĻāϰ āĻāĻĻā§āĻĻā§āĻļā§āϝāĻŽā§āϞāĻ āĻāĻĻā§āĻĻā§āĻļā§āϝ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋ - āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻĒā§āϝāĻžāĻ āϤā§āϰāĻŋ āĻāϰāĻžāĨ¤ āĻāĻžāύā§āĻĄāĻžāϰ⧠āϝāĻž āĻāĻā§ āϤāĻž āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻĻā§āĻā§āύ āϤāĻŦā§ āĻāĻāĻŋ āĻāĻŋāĻā§āĻāĻž āĻĻā§āĻāĻāĻāύāĻ āĻšāϝāĻŧā§ āĻāĻ ā§: āĻāϏāϞā§, āĻāĻāĻŋ āĻ
āύā§āĻ āĻāĻā§ āĻĒāϰāĻŋāϤā§āϝāĻā§āϤ āĻšāϝāĻŧā§āĻāĻŋāϞ āĻāĻŦāĻ āĻāϰ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻāĻ āĻĒā§āϰāĻžāύ⧠(āĻāĻŽāĻžāϰ āĻĒā§āϰāĻžāĻā§āϤāύ āϏāĻšāĻāϰā§āĻŽā§ āĻāĻāĻŦāĻžāϰ āϏā§āĻāĻžāύ⧠āĻŦā§āĻļ āĻāϝāĻŧā§āĻāĻāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰā§āĻāĻŋāϞā§āύ, āϤāĻŦā§ āĻāĻāĻŋ āĻ
āύā§āĻ āĻāĻā§ āĻāĻŋāϞ) . āϏāĻžāϧāĻžāϰāĻŖāĻāĻžāĻŦā§, āĻāĻŽāĻŋ āĻāĻ āĻŦāĻŋāώāϝāĻŧāĻāĻŋāĻā§ āĻĒā§āύāϰā§āϤā§āĻĨāĻŋāϤ āĻāϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāϝāĻŧā§āĻāĻŋ: āĻāĻŽāĻŋ āĻāĻžāĻāĻāĻžāĻāĻžāĻŽāĻ āĻāϰā§āĻāĻŋ, āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻĒāϰāĻŋāĻāϞā§āĻĒāύāĻž āĻāϰāĻŋāύāĻŋ āϤāĻž āĻĢā§āϞ⧠āĻĻāĻŋāϝāĻŧā§āĻāĻŋ, āĻĒā§āϰāĻāϞā§āĻĒāĻāĻŋāĻā§ āĻāϤ⧠āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰāĻŋāϤ āĻāϰā§āĻāĻŋ , āĻāύāϞāĻžāĻāύāϝā§āĻā§āϤ "āĻšāĻ" āĻŽāĻžāĻāĻā§āϰā§āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋ, āϏā§āĻā§āϝāĻžāĻ āĻĨā§āĻā§ āĻŦāĻĄāĻŧ āĻ
ā§āϝāĻžāϰā§āĻā§āϞāĻŋ āϏāϰāĻŋāϝāĻŧā§ (āĻāĻŦāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻļā§āϞ āĻĻā§āϰā§āĻā§āϝā§āϰ āĻ
ā§āϝāĻžāϰā§, āϝāĻž āϏā§āĻĒāώā§āĻāϤāĻ āĻāĻŽāĻžāĻā§ "āĻŦā§āĻŽāĻž" āĻāϰ⧠āϤā§āϞā§), āĻĒā§āϰā§āĻĢāĻžāĻāϞāĻžāϰāĻāĻŋ āĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāϝāĻŧ - āĻāĻŦāĻ āĻā§āĻāĻā§ āĻĒā§āϝāĻŧā§āĻāĻŋ āϝ⧠āĻĒā§āϰāĻžāϝāĻŧ 40% āϏāĻŽāϝāĻŧ āĻŦā§āϝāϝāĻŧ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ ...
āϤāĻžāĻ fwrite āϏāĻā§āĻā§ āĻāĻŋ āĻāĻĒ?
āĻāĻ āĻā§āĻĄā§, fwrite (āĻāĻŽāĻžāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒāϰā§āĻā§āώāĻžāϰ āĻā§āώā§āϤā§āϰā§: āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ 300 MB āĻĢāĻžāĻāϞā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻĒā§āϝāĻžāĻ āϤā§āϰāĻŋ āĻāϰāĻž, āĻāύāĻĒā§āĻ āĻĄā§āĻāĻž āϏāĻŽā§āĻĒā§āϰā§āĻŖāϰā§āĻĒā§ āĻŽā§āĻŽāϰāĻŋāϤ⧠āĻĨāĻžāĻā§) āĻāĻāĻāĻŋ āĻā§āĻ āĻŦāĻžāĻĢāĻžāϰ āĻāĻāĻžāϰ āϏāĻš āϞāĻā§āώ āϞāĻā§āώ āĻŦāĻžāϰ āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤ āϏā§āĻĒāώā§āĻāϤāĻ, āĻāĻ āĻāĻŋāύāĻŋāϏāĻāĻŋ āϧā§āϰ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§, āĻāĻŦāĻ āϏā§āĻāĻāύā§āϝ āĻāĻŽāĻŋ āĻāĻ āĻ āĻĒāĻŽāĻžāύāĻā§ āĻā§āύā§āĻāĻžāĻŦā§ āĻĒā§āϰāĻāĻžāĻŦāĻŋāϤ āĻāϰāϤ⧠āĻāĻžāĻāĨ¤ āĻŦāĻŋāĻāĻŋāύā§āύ āϧāϰāύā§āϰ āĻĄā§āĻāĻž āϏā§āϰā§āϏ, āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏ āĻāύāĻĒā§āĻ-āĻāĻāĻāĻĒā§āĻ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύā§āϰ āĻā§āύ⧠āĻāĻā§āĻāĻž āĻāĻāύāĻ āύā§āĻ, āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āϏāĻšāĻ āϏāĻŽāĻžāϧāĻžāύ āĻā§āĻāĻā§ āĻĒā§āϤ⧠āĻā§āϝāĻŧā§āĻāĻŋāϞāĻžāĻŽāĨ¤ āĻĒā§āϰāĻĨāĻŽ āĻāĻŋāύāĻŋāϏ āϝāĻž āĻŽāύ⧠āĻāϏā§āĻāĻŋāϞ āϤāĻž āĻšāϞ āĻŦāĻžāĻĢāĻžāϰ āĻāĻāĻžāϰ āĻŦāĻžāĻĄāĻŧāĻžāύā§
setvbuf(file, nullptr, _IOFBF, 64* 1024)āĻāĻŋāύā§āϤ⧠āĻāĻŽāĻŋ āĻĢāϞāĻžāĻĢāϞ⧠āĻāϞā§āϞā§āĻāϝā§āĻā§āϝ āĻāύā§āύāϤāĻŋ āĻĒāĻžāĻāύāĻŋ (āĻāĻāύ āĻĒā§āϰāĻžāϝāĻŧ 37% āϏāĻŽāϝāĻŧā§āϰ āĻāύā§āϝ fwrite āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ) - āϝāĻžāϰ āĻŽāĻžāύ⧠āĻāĻāĻŋ āĻāĻāύāĻ āĻĄāĻŋāϏā§āĻā§ āĻāύ āĻāύ āĻĄā§āĻāĻž āϞā§āĻāĻžāϰ āĻŦāĻŋāώāϝāĻŧ āύāϝāĻŧāĨ¤ fwrite-āĻāϰ "āĻšā§āĻĄā§āϰ āύā§āĻā§" āĻā§āĻāĻāĻā§āύ, āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻā§āĻā§āύ āϝ⧠āĻāĻāĻāĻŋ āϞāĻ/āĻāύāϞāĻ āĻĢāĻžāĻāϞ āĻāĻžāĻ āĻžāĻŽā§ āĻāϰāĻāĻŽ āĻāĻŋāĻā§āϰ āĻāĻŋāϤāϰ⧠āĻāĻāĻā§ (āĻāĻĻā§āĻŽ-āĻā§āĻĄ, āϏāĻŽāϏā§āϤ āĻŦāĻŋāĻļā§āϞā§āώāĻŖ āĻāĻŋāĻā§āϝā§āϝāĻŧāĻžāϞ āϏā§āĻā§āĻĄāĻŋāĻ 2017 āĻāϰ āĻ āϧā§āύ⧠āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ):
size_t fwrite (const void *buffer, size_t size, size_t count, FILE *stream)
{
size_t retval = 0;
_lock_str(stream); /* lock stream */
__try
{
retval = _fwrite_nolock(buffer, size, count, stream);
}
__finally
{
_unlock_str(stream); /* unlock stream */
}
return retval;
}
āĻĒā§āϰā§āĻĢāĻžāĻāϞāĻžāϰā§āϰ āĻŽāϤā§, _fwrite_nolock āĻļā§āϧā§āĻŽāĻžāϤā§āϰ 6% āϏāĻŽāϝāĻŧā§āϰ āĻāύā§āϝ āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āĻāϰā§, āĻŦāĻžāĻāĻŋāĻāĻž āĻāĻāĻžāϰāĻšā§āĻĄāĨ¤ āĻāĻŽāĻžāϰ āĻŦāĻŋāĻļā§āώ āĻā§āώā§āϤā§āϰā§, āĻĨā§āϰā§āĻĄ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āϏā§āĻĒāώā§āĻāϤāĻ āĻāĻāĻžāϰāĻāĻŋāϞ, āϤāĻžāĻ āĻāĻŽāĻŋ fwrite āĻāϞāĻāĻŋ āĻĒā§āϰāϤāĻŋāϏā§āĻĨāĻžāĻĒāύ āĻāϰ⧠āĻāĻāĻŋāĻā§ āĻā§āϏāϰā§āĻ āĻāϰāĻŦ - āĻāĻĒāύāĻžāϰ āϝā§āĻā§āϤāĻŋāϤ⧠āĻāĻžāϞāĻžāĻ āĻšāĻāϝāĻŧāĻžāϰ āĻĻāϰāĻāĻžāϰ āύā§āĻāĨ¤ āĻŽā§āĻ: āĻāĻ āϏāĻžāϧāĻžāϰāĻŖ āĻŽā§āϝāĻžāύāĻŋāĻĒā§āϞā§āĻļāύāĻāĻŋ āĻĢāϞāĻžāĻĢāϞ āϰā§āĻāϰā§āĻĄ āĻāϰāĻžāϰ āĻāϰāĻ āĻāϞā§āϞā§āĻāϝā§āĻā§āϝāĻāĻžāĻŦā§ āĻšā§āϰāĻžāϏ āĻāϰā§āĻā§, āϝāĻž āĻŽā§āϞ āϏāĻāϏā§āĻāϰāĻŖā§ āĻŦā§āϝāϝāĻŧ āĻāϰāĻž āϏāĻŽāϝāĻŧā§āϰ āĻĒā§āϰāĻžāϝāĻŧ āĻ āϰā§āϧā§āĻāĨ¤ āϝāĻžāĻāĻšā§āĻ, POSIX āĻŦāĻŋāĻļā§āĻŦā§ āĻāĻāĻāĻŋ āĻ āύā§āϰā§āĻĒ āĻĢāĻžāĻāĻļāύ āϰāϝāĻŧā§āĻā§ - . āϏāĻžāϧāĻžāϰāĻŖāĻāĻžāĻŦā§ āĻŦāϞāϤ⧠āĻā§āϞā§, āĻĢā§āϰā§āĻĄā§āϰ āĻā§āώā§āϤā§āϰā§āĻ āĻāĻāĻ āĻāĻĨāĻž āĻĒā§āϰāϝā§āĻā§āϝāĨ¤ āĻāĻāĻāĻžāĻŦā§, āĻāĻāĻā§āĻĄāĻŧāĻž #defines āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āĻāĻĒāύāĻŋ āĻ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āϞāĻ āĻāĻžāĻĄāĻŧāĻžāĻ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻā§āϰāϏ-āĻĒā§āϞā§āϝāĻžāĻāĻĢāϰā§āĻŽ āϏāĻŽāĻžāϧāĻžāύ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύ āϝāĻĻāĻŋ āϏā§āĻā§āϞāĻŋ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āύāĻž āĻšāϝāĻŧ (āĻāĻŦāĻ āĻāĻāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāĻ āĻāĻā§)āĨ¤
fwrite, _fwrite_nolock, setvbuf
āĻāϞā§āύ āĻŽā§āϞ āĻĒā§āϰāĻā§āĻā§āĻ āĻĨā§āĻā§ āϏāϰ⧠āĻāϏ⧠āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻŦāĻŋāώāϝāĻŧ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻĻāĻŋāĻā§ āĻŽāύā§āϝā§āĻ āĻĻāĻŋāĻ: āĻāĻāĻāĻŋ āĻŦāĻĄāĻŧ āĻĢāĻžāĻāϞ (ā§Ģ⧧⧍ āĻāĻŽāĻŦāĻŋ) āĻ āϤā§āϝāύā§āϤ āĻā§āĻ āĻā§āĻ āĻāĻŖā§āĻĄā§âāĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻ āĻŦāĻžāĻāĻ āĻāϰā§âāϞā§āĻāĻžāĨ¤ āĻā§āϏā§āĻ āϏāĻŋāϏā§āĻā§āĻŽ: āĻāĻāĻŽāĻĄāĻŋ āϰāĻžāĻāĻā§āύ ā§ ā§§ā§ā§Ļā§Ļ, ā§§ā§Ŧ āĻāĻŋāĻŦāĻŋ āϰâā§āϝāĻžāĻŽ, ā§ā§¨ā§Ļā§Ļ āĻāϰāĻĒāĻŋāĻāĻŽ āĻāĻāĻāĻĄāĻŋāĻĄāĻŋ, ā§Ŧā§Ē āĻāĻŽāĻŦāĻŋ āĻā§āϝāĻžāĻļāĨ¤ Windows 10 ā§§ā§Žā§Ļ⧝, āĻŦāĻžāĻāύāĻžāϰāĻŋāĻāĻŋ ā§Šā§¨-āĻŦāĻŋāĻ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāϞā§āĻĄ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ, āĻ āĻĒāĻāĻŋāĻŽāĻžāĻāĻā§āĻļāύ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻž āĻāĻā§, āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāĻāĻŋ āϏā§āĻā§āϝāĻžāĻāĻŋāĻā§āϝāĻžāϞāĻŋ āϞāĻŋāĻā§āĻ āĻāϰāĻžāĨ¤
āĻĒāϰā§āĻā§āώāĻžāϰ āĻāύā§āϝ āύāĻŽā§āύāĻž:
#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, 1, sizeof(b), file.get());
auto end = steady_clock::now();
auto interval = duration_cast<microseconds>(end - start);
printf("Time: %lldn", interval.count());
return 0;
}
āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāĻā§āϞāĻŋ āĻšāĻŦā§ TEST_BUFFER_SIZE, āĻāĻŦāĻ āĻāϝāĻŧā§āĻāĻāĻŋ āĻā§āώā§āϤā§āϰ⧠āĻāĻŽāϰāĻž fwrite_unlocked āĻā§ fwrite āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϰāϤāĻŋāϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻŦāĨ¤ āϏā§āĻĒāώā§āĻāĻāĻžāĻŦā§ āĻŦāĻžāĻĢāĻžāϰ āϏāĻžāĻāĻ āϏā§āĻ āύāĻž āĻāϰ⧠fwrite āĻā§āϏ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰāĻž āϝāĻžāĻ (setvbuf āĻāĻŦāĻ āϏāĻāĻļā§āϞāĻŋāώā§āĻ āĻā§āĻĄāĻāĻŋ āĻŽāύā§āϤāĻŦā§āϝ āĻāϰā§āύ): āϏāĻŽāϝāĻŧ 27048906 Âĩs, āϞā§āĻāĻžāϰ āĻāϤāĻŋ - 18.93 MB/sāĨ¤ āĻāĻāύ āĻŦāĻžāĻĢāĻžāϰā§āϰ āĻāĻāĻžāϰ 64 KB āĻ āϏā§āĻ āĻāϰāĻž āϝāĻžāĻ: āϏāĻŽāϝāĻŧ - 25037111 Îŧs, āĻāϤāĻŋ - 20.44 Mb/sāĨ¤ āĻāĻāύ Setvbuf: 7262221 Âĩs, āĻāϤāĻŋ - 70.5 Mb/s āĻāϞ āύāĻž āĻāϰ⧠_fwrite_nolock-āĻāϰ āĻ āĻĒāĻžāϰā§āĻļāύ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āϝāĻžāĻ!
āĻāϰ āĻĒāϰā§, āĻŦāĻžāĻĢāĻžāϰ āĻāĻāĻžāϰ (setvbuf) āύāĻŋāϝāĻŧā§ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āϝāĻžāĻ:

5āĻāĻŋ āĻĒāϰā§āĻā§āώāĻžāϰ āĻāĻĄāĻŧ āĻāϰ⧠āĻĄā§āĻāĻž āĻĒā§āϰāĻžāĻĒā§āϤ āĻšāϝāĻŧā§āĻāĻŋāϞ; āĻāĻŽāĻŋ āϤā§āϰā§āĻāĻŋāĻā§āϞāĻŋ āĻāĻŖāύāĻž āĻāϰāϤ⧠āĻā§āĻŦ āĻ
āϞāϏ āĻāĻŋāϞāĻžāĻŽāĨ¤ āĻāĻŽāĻžāϰ āĻāύā§āϝ, āύāĻŋāϝāĻŧāĻŽāĻŋāϤ HDD-āϤ⧠93 āĻŦāĻžāĻāĻ āϞā§āĻāĻžāϰ āϏāĻŽāϝāĻŧ 1 MB/s āĻāĻāĻāĻŋ āĻā§āĻŦ āĻāĻžāϞ āĻĢāϞāĻžāĻĢāϞ, āĻāĻĒāύāĻžāĻā§ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āϏāϰā§āĻŦā§āϤā§āϤāĻŽ āĻŦāĻžāĻĢāĻžāϰ āĻāĻāĻžāϰ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰāϤ⧠āĻšāĻŦā§ (āĻāĻŽāĻžāϰ āĻā§āώā§āϤā§āϰā§, 256 KB āĻ āĻŋāĻ āĻāĻā§) āĻāĻŦāĻ fwrite-āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠_fwrite_nolock/fwrite_unlocked ( āϝāĻĻāĻŋ āĻĨā§āϰā§āĻĄ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύāĻž āĻšāϝāĻŧ, āĻ
āĻŦāĻļā§āϝāĻ)āĨ¤
āĻ
āύā§āϰā§āĻĒ āĻ
āĻŦāϏā§āĻĨāĻžāϝāĻŧ fread āϏāĻā§āĻā§ āĻāĻāĻāĻāĻžāĻŦā§. āϝā§āĻšā§āϤ⧠āĻāĻŽāĻžāϰ āĻšāĻžāϤ⧠āϞāĻŋāύāĻžāĻā§āϏ āϏāĻš āĻāĻāĻāĻŋ āĻšāĻžāϰā§āĻĄāĻāϝāĻŧā§āϝāĻžāϰ āĻŽā§āĻļāĻŋāύ āύā§āĻ (āĻāĻāĻ-āĻŦā§āϰā§āĻĄ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ āĻāĻŖāύāĻž āĻāϰāĻž āĻšāϝāĻŧ āύāĻž), āϤāĻžāĻ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞ āĻŽā§āĻļāĻŋāύ⧠āĻāĻāĻāĻŋ āϏā§āĻŽāĻŋāϤ āĻĒāϰā§āĻā§āώāĻž āĻāĻžāϞāĻžāύā§āϰ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāϝāĻŧā§āĻāĻŋ (āĻšāĻžāĻāĻĒāĻžāϰ-āĻāĻŋ, āĻāĻĒā§āύāϏā§āϏ 15, āĻāĻŋāϏāĻŋāϏāĻŋ 8.3.1) - āĻĒā§āϝāĻžāĻāĻžāϰā§āύ, āύā§āϤāĻŋāĻāϤāĻāĻžāĻŦā§, āĻāĻāĻ: "āύāĻā§āύ" fwrite 20 Mb/s, fwrite + 256 KB āĻŦāĻžāĻĢāĻžāϰ 23 Mb/s, fwrite_unlocked āĻāĻāĻ āĻŦāĻžāĻĢāĻžāϰā§āϰ āϏāĻžāĻĨā§ - 35 Mb/s (64-āĻŦāĻŋāĻ āĻŦāĻžāĻāύāĻžāϰāĻŋ, āĻāĻāϤā§āϰāĻŋāϤ g++ -o2 - s -static-libgcc -static-libstdc++ fwrite_testāĨ¤ cpp -o fwrite_test)āĨ¤
āĻāϤā§āϤāϰāĻāĻžāώ
āĻāĻ āύāĻŋāĻŦāύā§āϧāĻāĻŋ āϞā§āĻāĻžāϰ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻāĻŋāϞ āĻ āύā§āĻ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻāĻŋ āϏāĻšāĻ āĻāĻŦāĻ āĻāĻžāϰā§āϝāĻāϰ⧠āĻā§āĻļāϞ āĻŦāϰā§āĻŖāύāĻž āĻāϰāĻž (āĻāĻŽāĻŋ āĻāϰ āĻāĻā§ āĻāĻāύāĻ _fwrite_nolock/fwrite_unlocked āĻĢāĻžāĻāĻļāύ āĻā§āĻĄāĻŧā§ āĻāϏāĻŋāύāĻŋ, āϏā§āĻā§āϞāĻŋ āĻā§āĻŦ āĻāύāĻĒā§āϰāĻŋāϝāĻŧ āύāϝāĻŧ - āĻāĻŋāύā§āϤ⧠āĻŦā§āĻĨāĻž)āĨ¤ āĻāĻŽāĻŋ āĻāĻžāύ āĻāϰāĻŋ āύāĻž āϝ⧠āĻāĻĒāĻžāĻĻāĻžāύāĻāĻŋ āύāϤā§āύ, āϤāĻŦā§ āĻāĻŽāĻŋ āĻāĻļāĻž āĻāϰāĻŋ āύāĻŋāĻŦāύā§āϧāĻāĻŋ āϏāĻŽā§āĻĒā§āϰāĻĻāĻžāϝāĻŧā§āϰ āĻāύā§āϝ āĻāĻĒāϝā§āĻā§ āĻšāĻŦā§āĨ¤
āĻāϤā§āϏ: www.habr.com
