精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++性能真的不如C嗎?

開發 后端
眾所周知,C++兼容了C的所有功能,顯然從所有角度去對比分析是不現實的,所以本文從我們常用的輸入輸出即標準流(iostream和stdio)的角度來分析講解。

最近在知乎上看了篇帖子,題目是為什么C++沒有C語言快,如下圖:

恰好之前研究過這塊,所以借助本文,分析下這個問題(無意于語言之爭,單純是從技術角度??)。

眾所周知,C++兼容了C的所有功能,顯然從所有角度去對比分析是不現實的,所以本文從我們常用的輸入輸出即標準流(iostream和stdio)的角度來分析講解。

示例

為了更加直觀地來對比分析,寫了個示例,通過scanf和cin讀文件,然后分析兩種方式的性能高低,代碼如下:

#include <chrono>
#include <functional>
#include <iostream>
#include <fstream>
const int num=1000000;
void time_report(const std::function<void()> &f1, const std::function<void()> &f2) {
auto start = std::chrono::high_resolution_clock::now();
f1();
auto end = std::chrono::high_resolution_clock::now();
std::cout << "cin cost " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms" << std::endl;
start = std::chrono::high_resolution_clock::now();
f2();
end = std::chrono::high_resolution_clock::now();
std::cout << "scanf cost " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms" << std::endl;
}
void write() {
std::ofstream file("./data");
for(int i = 0; i < num; ++i) {
file << rand() <<' ';
if((i + 1) % 20 == 0) {
file << std::endl;
}
}
}
int main() {
write();

time_report([](){
freopen("./data","r",stdin);
int n = 0;
for(int i=0; i<num; i++) {
std::cin >> n;
}
}, [](){
freopen("./data","r",stdin);
int n = 0;
for(int i = 0; i < num; ++i) {
scanf("%d", &n);
}
});
return 0;
}

編譯,運行之后,輸出如下:

cin cost 686ms
scanf cost 189ms

從上述輸出來看,cin的耗時是scanf的3倍多,果真如此么?

sync_with_stdio

C++性能真的差C這么多嗎?直接顛覆了對C++的認知,即使性能真的低,也得知道為什么低吧,于是開始研究,發現C++為了兼容C,在C標準流(stdio)和C++標準流(iostrem)保持同步,這樣就可以混合使用C和C++風格的I/O,且能保證得到合理和預期的結果,而正是這個同步導致C++在cin性能上有損失。如果禁用同步,則允許C++流擁有自己的獨立緩沖區,這樣性能就會提升很多。

那么是否可以禁用該同步功能呢?

C++提供了一個函數std::ios::sync_with_stdio,聲明如下:

static bool sync_with_stdio(bool __sync = true);

如果參數為false,則代表禁用此同步。從上面聲明可以看出,默認情況下 __sync = true也就是說禁用同步,而如果__sync為false的話,則會有如下操作:

bool
ios_base::sync_with_stdio(bool __sync) {
bool __ret = ios_base::Init::_S_synced_with_stdio;

if (!__sync && __ret) {
// ...
cout.rdbuf(&buf_cout);
cin.rdbuf(&buf_cin);
cerr.rdbuf(&buf_cerr);
clog.rdbuf(&buf_cerr);
// ...
}
return __ret;
}

從上述代碼,進一步驗證了我們上面的說法,如果禁用了同步功能,則C++流使用自己的緩沖區buf_cin(此處以cin為例),幾種buffer的定義如下:

typedef char fake_filebuf[sizeof(stdio_filebuf<char>)]
__attribute__ ((aligned(__alignof__(stdio_filebuf<char>))));
fake_filebuf buf_cout;
fake_filebuf buf_cin;
fake_filebuf buf_cerr;

好了,截止到現在,我們已經搞清楚了為什么C++流性能要慢于C,為了驗證是否真的是因為使用了同步功能而導致的性能差異,使用std::ios::sync_with_stdio(false)關閉同步,代碼示例如下:

#include <chrono>
#include <functional>
#include <iostream>
#include <fstream>
const int num=1000000;
void time_report(const std::function<void()> &f1, const std::function<void()> &f2) {
auto start = std::chrono::high_resolution_clock::now();
f1();
auto end = std::chrono::high_resolution_clock::now();
std::cout << "cin cost " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms" << std::endl;
start = std::chrono::high_resolution_clock::now();
f2();
end = std::chrono::high_resolution_clock::now();
std::cout << "scanf cost " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms" << std::endl;
}
void write() {
std::ofstream file("./data");
for(int i = 0; i < num; ++i) {
file << rand() <<' ';
if((i + 1) % 20 == 0) {
file << std::endl;
}
}
}
int main() {
std::ios::sync_with_stdio(false);
write();
time_report([](){
freopen("./data","r",stdin);
int n = 0;
for(int i=0; i<num; i++) {
std::cin >> n;
}
}, [](){
freopen("./data","r",stdin);
int n = 0;
for(int i = 0; i < num; ++i) {
scanf("%d", &n);
}
});
return 0;
}

編譯,運行后,輸出如下:

cin cost 178ms
scanf cost 189ms

可以看出禁用同步后,二者的性能基本一致。

既然禁用同步后,C++流的性能與C基本一致,那么是否直接禁用呢?答案是依賴于具體的使用場景。

1、同步的C++流是線程安全的,也就說來自不同線程的輸出可能會交錯,但數據不會產生競爭,而如果禁用同步,則可能出現意想不到的結果。

2、如果禁用了同步功能,輸入輸出順序可能會得不到我們想要的結果。

#include <stdio.h>
#include <iostream>
int main() {
std::cout << "a ";
printf("b ");
std::cout << "c ";
return 0;
}

上述代碼執行后,輸出a b c ,符合我們的預期。

如果加上禁用同步代碼,如下:

#include <stdio.h>
#include <iostream>
int main() {
std::ios_base::sync_with_stdio(false);
std::cout << "a ";
printf("b ");
std::cout << "c ";
return 0;
}

編譯、運行之后,結果為a c b,與我們期望的不一致。

結語

如果使用C編程,那么使用C stdio,而如果使用C++編程,則建議使用C++ I/O。如果在某些特殊場景下,需要混合使用,那么強烈建議不要禁用同步,否則會得到意想不到的結果。

責任編輯:龐桂玉 來源: C語言與C++編程
相關推薦

2015-09-07 13:55:53

PHPC++

2010-01-21 10:23:53

C++代碼

2010-01-26 09:24:53

C++語言

2010-01-15 16:45:35

C++語言

2010-01-14 10:34:02

C++語言

2010-01-20 17:23:03

C++編程語言

2010-01-20 10:14:53

C++程序

2010-01-14 13:24:49

CC++語言

2010-01-21 17:14:40

C++兼容

2010-01-14 14:55:14

C++編譯器

2010-01-18 11:12:36

2010-01-14 10:06:30

C++模板

2021-06-10 09:40:12

C++性能優化Linux

2024-12-27 09:29:09

2021-07-11 18:04:04

C語言

2014-04-17 10:37:43

C++.NET Native

2010-01-14 17:52:02

2024-06-24 12:41:40

2011-07-14 17:45:06

CC++

2010-01-21 14:07:14

CC++聲明
點贊
收藏

51CTO技術棧公眾號

亚洲人做受高潮| heyzo国产| 97超碰国产在线| 欧美视频在线观看| 日韩电影中文字幕一区| 人妻无码视频一区二区三区| 色综合久久久久综合一本到桃花网| 紧缚奴在线一区二区三区| 欧美巨大黑人极品精男| 超碰97人人干| japansex久久高清精品| 精品免费在线视频| 久久久久亚洲av无码专区喷水| 亚洲精品国产精| 青青草视频一区| 久久久久久久爱| 日本伦理一区二区三区| 久久99精品国产自在现线| 欧美丝袜自拍制服另类| 男人日女人视频网站| 日本在线观看网站| 91网站在线观看视频| 91亚洲精品久久久久久久久久久久| 日韩久久久久久久久| 欧美gay男男猛男无套| 亚洲国产精品va在线看黑人| 午夜不卡福利视频| 欧美极品免费| 精品久久久久久久久久国产| 天天成人综合网| av色图一区| 久久无码av三级| 国产一区免费在线| 亚洲爱爱综合网| 国精产品一区一区三区mba视频| 日韩av不卡电影| 久久久香蕉视频| 久久精品一区二区不卡| 在线观看视频99| 国产一级久久久久毛片精品| 日韩最新在线| 亚洲国内高清视频| 女性生殖扒开酷刑vk| 欧美久久亚洲| 欧美一区二区精品| www.51色.com| 中文字幕在线观看播放| 色777狠狠狠综合伊人| 亚洲精品成人久久电影| 亚洲乱妇老熟女爽到高潮的片| 国产精品3区| 欧美片网站yy| 九九热99视频| 国产亚洲精彩久久| 精品视频一区三区九区| caoporn超碰97| 高清成人在线| 欧美少妇bbb| 超碰超碰在线观看| 成人a在线观看高清电影| 在线观看不卡视频| 国产又大又黄又粗的视频| 日韩和的一区二在线| 91豆麻精品91久久久久久| 国产精品亚洲a| 成人做爰免费视频免费看| 在线免费观看视频一区| 香蕉视频禁止18| 性欧美video另类hd尤物| 91精品国产一区二区三区香蕉| 在线黄色免费看| 亚洲精品在线国产| 亚洲精品99999| 国产人妻一区二区| 大色综合视频网站在线播放| 久久精品国产亚洲精品2020| 黄色一级视频免费| 最新成人av网站| 国产97在线观看| 一区精品在线观看| 国产麻豆精品在线| 狠狠色综合欧美激情| 欧美日本韩国一区二区| 国产精品日韩成人| 红桃一区二区三区| 97人人在线视频| 91福利在线看| 中文字幕在线观看视频www| 精品视频在线你懂得| 亚洲色无码播放| 91九色丨porny丨极品女神| 影音先锋中文字幕一区| 国产成人高潮免费观看精品| 在线免费a视频| 成人涩涩免费视频| 亚洲激情一区二区三区| av网址在线看| 色婷婷久久99综合精品jk白丝| 粉色视频免费看| 久久精品66| 久久精品国亚洲| 九九热国产视频| 久久国产精品色婷婷| 国产精品免费在线| 生活片a∨在线观看| 污片在线观看一区二区| 一级黄色片在线免费观看| 偷拍自拍亚洲色图| 成年无码av片在线| 中文字幕一区在线播放| 国产精品18久久久| 日本一区二区三区在线视频| 久草在线视频资源| 欧美色爱综合网| 亚洲欧美日本一区| 亚洲区综合中文字幕日日| 日本不卡高字幕在线2019| 99久久精品国产成人一区二区| 久久久精品人体av艺术| 日韩免费在线观看av| 国产香蕉久久| 国产亚洲精品久久久优势| 黄色小视频在线免费看| 精品夜夜嗨av一区二区三区| 日本精品国语自产拍在线观看| 欧美6一10sex性hd| 7878成人国产在线观看| 亚洲av熟女国产一区二区性色| 精品白丝av| 5566av亚洲| 天堂中文8资源在线8| 在线这里只有精品| 欧美性xxxx图片| 亚洲激情婷婷| 99re视频在线| 成人国产免费电影| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 91av视频导航| 亚洲黄色小说网| 亚洲三级在线播放| 潘金莲激情呻吟欲求不满视频| 欧美日韩国产传媒| 国产精国产精品| 久久精品国产亚洲a∨麻豆| 亚洲成av人片一区二区三区| 久久黄色一级视频| 欧美性色综合| 99re在线国产| 欧美人与禽性xxxxx杂性| 欧美一区二区精品| 青青操国产视频| 夫妻av一区二区| 欧美视频在线免费播放| 日韩精品免费一区二区夜夜嗨 | 国产精品911| 日韩精品一区二区三区电影| 国产在线视频欧美一区| 欧美丰满少妇xxxxx做受| www.亚洲天堂.com| 亚洲香蕉伊在人在线观| 亚洲欧美高清在线| 一区二区三区高清视频在线观看| 久久av免费观看| 超碰一区二区| 夜夜嗨av色一区二区不卡| 91丨九色丨海角社区| 国产精品久久久久影院亚瑟 | av网站手机在线观看| 国产精品香蕉| 日本久久久久久久久久久| 国产高清一级毛片在线不卡| 欧美三片在线视频观看 | 亚洲高清在线视频| 精品无码人妻一区| 美女一区二区三区| 欧美国产综合在线| 伊人春色之综合网| 国产日韩精品电影| 18videosex性欧美麻豆| 亚洲福利视频专区| 91视频在线视频| 亚洲精品中文字幕在线观看| 亚洲一区二区在线免费| 日本欧美加勒比视频| www.国产二区| 国产va免费精品观看精品视频| 成人免费黄色网| 韩国成人二区| xxav国产精品美女主播| 无码精品在线观看| 欧美福利视频一区| 天天操天天干视频| 亚洲精选视频免费看| www.中文字幕av| 国产成人亚洲综合a∨婷婷图片 | 卡一卡二国产精品 | 蜜桃av在线播放| 中文字幕亚洲一区在线观看| 亚洲av无码国产综合专区| 色欧美乱欧美15图片| 欧美精品一区二区成人| 国产色产综合色产在线视频| jjzz黄色片| 精品一区精品二区高清| 丰满少妇被猛烈进入高清播放| 亚洲第一天堂| 日韩欧美亚洲在线| 日韩欧美黄色| 999精品视频一区二区三区| 成人午夜精品| 69久久夜色精品国产69乱青草| 久久bbxx| 中文精品99久久国产香蕉| 天堂在线观看免费视频| 欧美一区二区精美| 亚洲怡红院av| 在线精品视频小说1| 永久免费看片在线播放| 亚洲精品视频在线看| 欧美成人短视频| 久久久久一区二区三区四区| 亚洲乱妇老熟女爽到高潮的片 | 日本中文字幕在线观看| 亚洲欧美精品在线| 天堂网在线中文| 精品久久人人做人人爱| 国产成人久久精品77777综合| 欧美亚洲国产一区二区三区va | 欧美精品三级日韩久久| 国产一卡二卡三卡| 色综合天天在线| 成年人免费高清视频| 亚洲成人一区二区在线观看| 欧美日韩大片在线观看| 亚洲欧美国产高清| 成人在线观看免费完整| 亚洲欧洲性图库| 很污很黄的网站| 成人欧美一区二区三区黑人麻豆| 在线观看免费黄色网址| 国产欧美一区二区精品秋霞影院| 亚洲精品乱码久久久久久久久久久久 | 在线观看av一区二区| 国产一区二区视频网站| 色天使色偷偷av一区二区| 亚洲图片在线视频| 一本色道久久综合亚洲精品按摩| 天海翼一区二区| 精品久久久久久久久中文字幕| 日韩黄色三级视频| 五月综合激情日本mⅴ| 免费日韩一级片| 欧美日韩在线免费| 69国产精品视频免费观看| 日本韩国欧美在线| 国产成人自拍偷拍| 欧美亚洲动漫精品| 中文字幕av影视| 91麻豆精品国产自产在线观看一区| 亚洲综合精品视频| 欧美一区二区三区在线| www.污视频| 日韩av综合中文字幕| 酒色婷婷桃色成人免费av网| 在线视频欧美日韩精品| 国产在线高清理伦片a| 久久99国产精品自在自在app| 在线视频国产区| 国自产精品手机在线观看视频| 美女搞黄视频在线观看| 国产精品久久久久久亚洲影视| 国产欧美自拍| 成人久久18免费网站漫画| 久久资源综合| 日韩av不卡播放| 综合天堂av久久久久久久| av免费看网址| 日韩av网站免费在线| 婷婷中文字幕在线观看| 国产ts人妖一区二区| 极品人妻一区二区三区| 国产精品午夜久久| 国产在线观看免费av| 色菇凉天天综合网| 国产成人精品无码高潮| 亚洲精品一区二区网址 | 久久久久久久一区二区三区| 欧美gay视频| av日韩中文字幕| 精品国产中文字幕第一页 | 亚洲影院在线| 中文字幕一区久久| 99久久婷婷国产| 中文乱码字幕高清一区二区| 亚洲网友自拍偷拍| 国产九色91回来了| 精品日韩99亚洲| 亚洲s色大片| 57pao国产成人免费| 国产精品视频一区二区三区| 欧美日韩在线一二三| 欧美精品一区二区三区久久久竹菊| 成人一级片网站| 国产91精品在线观看| 国产精品久久久久无码av色戒| 亚洲欧美在线高清| 中文字幕免费观看| 亚洲国内精品在线| 污视频网站免费在线观看| 国产精品777| 免费日韩一区二区三区| 国产亚洲精品久久久久久久| 免费在线观看不卡| 国产精品久久不卡| 亚洲综合成人在线视频| 一级特黄aaa| 国产亚洲精品一区二555| 毛片在线网址| 91亚洲精品在线| 日韩在线观看| 亚洲免费一级视频| 国产亚洲欧美一区在线观看| 日本午夜精品理论片a级app发布| 91精品蜜臀在线一区尤物| jizzjizz在线观看| 国产精品99久久99久久久二8| 伦理一区二区| 黄网站色视频免费观看| 狠狠狠色丁香婷婷综合久久五月| 欧美激情aaa| 日韩欧美在线播放| 无套内谢的新婚少妇国语播放| 欧美精品电影免费在线观看| 亚洲小说春色综合另类电影| 中文字幕在线亚洲三区| 日韩av二区在线播放| 国产综合精品在线| 日本韩国精品一区二区在线观看| 午夜国产在线视频| 97精品在线观看| 美女网站色精品尤物极品姐弟| 日本大片免费看| 北条麻妃国产九九精品视频| 久久网中文字幕| 精品欧美黑人一区二区三区| 精品精品导航| 精品视频免费观看| aⅴ色国产欧美| 久久国产精品无码一级毛片| 精品久久久久久中文字幕大豆网| 香蕉视频免费在线看| 国产69久久精品成人| 日韩免费电影在线观看| 不卡影院一区二区| 国产精品欧美久久久久无广告| 亚洲熟妇无码久久精品| 久久精品视频亚洲| 欧美日韩国产一区二区在线观看| 日本一本草久p| 国产999精品久久久久久绿帽| 激情综合网五月婷婷| 亚洲黄色www| 欧美动物xxx| 性欧美精品一区二区三区在线播放| 精品在线免费观看| 免费在线观看黄视频| 亚洲第一中文字幕| 在线男人天堂| 亚洲精品成人a8198a| 国产美女一区二区三区| 麻豆一区二区三区精品视频| 亚洲精品成人久久| 成人在线观看免费视频| 久久免费一级片| 91色九色蝌蚪| 中文字幕无线码一区| 欧美尺度大的性做爰视频| 国产精品任我爽爆在线播放| 亚洲乱码国产一区三区| 综合色天天鬼久久鬼色| 午夜视频福利在线| 国产精品直播网红| 欧美午夜影院| 国产视频三区四区| 欧美大片在线观看一区| 另类专区亚洲| 欧美视频在线第一页| 久久综合国产精品| 国产乱叫456在线| 97超级碰在线看视频免费在线看 | 亚洲欧美资源在线| 久久久久亚洲精品中文字幕| 亚欧无线一线二线三线区别| 国产精品高潮呻吟| 三级在线电影| 91在线视频导航| 日韩黄色小视频| 精品一级少妇久久久久久久| 综合国产在线观看| 欧美日韩麻豆|