matek3005 napisał(a)
Wyłączenie synchronizacji może coś pomoże http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/
Nie prawda. Przy wypisywaniu danych synchronizacja i buforowanie pomaga (zależy od obciążenia), mój kod testowy:
#!/bin/bash
times=1000000 # liczba iteracji
main="int main(){"
loop=" for(int i = 0; i < $times; i++) "
end=" return 0;}"
CXX=g++
FLAGS=-O2
file=test.cpp # plik do kompilacji
ofile=test.out # wyjściowy plik uruchomieniowy
ifile=test.in # pilik z danymy wejściowymi
if [ ! -e $ifile ]
then
seq 0 $powt > $ifile
fi
echoc "@{og}Wyjście:"
echo -e "#include<iostream> \n$main $loop std::cout << i;$end" > $file
echo "std::cout bez sync_with_stdio(0)"
$CXX -o $ofile $file $FLAGS
time ./$ofile > /dev/null
echo -e "#include<iostream> \n$main std::ios_base::sync_with_stdio(0); $loop std::cout << i;$end" > $file
echo -e "\nstd::cout z sync_with_stdio(0)"
$CXX -o $ofile $file $FLAGS
time ./$ofile > /dev/null
echo -e "#include<cstdio> \n$main $loop printf(\"%d\", i);$end" > $file
echo -e "\nprintf()"
$CXX -o $ofile $file $FLAGS
time ./$ofile > /dev/null
echoc -en "\n@{og}Wejście:"
echo -e "#include<iostream> \n$main int test; $loop { std::cin >> test;}$end" > $file
echo -e "\nstd::cin bez sync_with_stdio(0)"
$CXX -o $ofile $file $FLAGS
time ./$ofile < $ifile
echo -e "#include<iostream> \n$main std::ios_base::sync_with_stdio(0); int test; $loop { std::cin >> test;}$end" > $file
echo -e "\nstd::cin z sync_with_stdio(0)"
$CXX -o $ofile $file $FLAGS
time ./$ofile < $ifile
echo -e "#include<cstdio> \n$main int test; $loop { scanf(\"%d\", &i);}$end" > $file
echo -e "\nscanf()"
g++ -o $ofile $file $FLAGS
time ./$ofile < $ifile
A out:
Wyjście:
std::cout bez sync_with_stdio(0)
real 0m0.081s
user 0m0.077s
sys 0m0.003s
std::cout z sync_with_stdio(0)
real 0m0.075s
user 0m0.073s
sys 0m0.000s
printf()
real 0m0.101s
user 0m0.100s
sys 0m0.000s
Wejście:
std::cin bez sync_with_stdio(0)
real 0m0.918s
user 0m0.870s
sys 0m0.010s
std::cin z sync_with_stdio(0)
real 0m0.311s
user 0m0.310s
sys 0m0.000s
scanf()
real 0m0.112s
user 0m0.107s
sys 0m0.003s