2013-02-23 41 views
52

tôi đang học C++ và tôi thấy một cái gì đó mà tôi không thể hiểu:Việc xả bộ đệm nghĩa là gì?

bộ đệm đầu ra có thể được một cách rõ ràng ửng đỏ để buộc các bộ đệm được bằng văn bản. Theo mặc định, đọc cin tuôn ra cout; cout cũng được flushed khi chương trình kết thúc bình thường.

Vì vậy, xóa bộ đệm (ví dụ: bộ đệm đầu ra): làm điều này xóa bộ đệm bằng cách xóa mọi thứ trong bộ đệm hay xóa bộ đệm bằng cách xuất mọi thứ trong đó? Hoặc không xả bộ đệm có nghĩa là một cái gì đó hoàn toàn khác nhau?

+3

"xuất ra". Dự đoán thứ hai của bạn là chính xác. –

Trả lời

3

Xóa bộ đệm bằng cách xuất tất cả mọi thứ.

72

Cân nhắc việc ghi vào một tệp. Đây là một hoạt động tốn kém. Nếu trong mã của bạn, bạn viết một byte tại một thời điểm, thì mỗi lần viết một byte sẽ rất tốn kém. Vì vậy, một cách phổ biến để cải thiện hiệu suất là lưu trữ dữ liệu mà bạn đang viết trong bộ đệm tạm thời. Chỉ khi có rất nhiều dữ liệu là bộ đệm được ghi vào tệp. Bằng cách trì hoãn việc viết và viết một khối lớn trong một lần, hiệu suất được cải thiện.

Với điều này trong tâm trí, xả bộ đệm là hành động chuyển dữ liệu từ bộ đệm vào tệp.

Điều này có xóa bộ đệm bằng cách xóa mọi thứ trong bộ đệm hay xóa bộ đệm bằng cách xuất mọi thứ trong đó?

Sau đó.

+0

Cảm ơn. một điều nữa. Đọc cin cout. Điều này "đọc cin" có nghĩa là khi người dùng nhập nội dung nào đó hoặc khi người dùng được nhắc nhập nội dung nào đó? –

+2

Đọc cin diễn ra khi bạn sử dụng toán tử luồng để đọc từ cin. Thông thường bạn muốn tuôn ra cout khi bạn đọc vì nếu không đầu vào có thể xuất hiện trước dấu nhắc. –

+1

@DavidHeffernan Theo như tôi biết, bạn không bao giờ cần phải xả cout trước cin, bởi vì cin và cout được gắn (Stroustrup, Ngôn ngữ lập trình C++, [io.tie]). – sturmer

14

Bạn đã trích dẫn câu trả lời:

bộ đệm đầu ra có thể được một cách rõ ràng ửng đỏ để buộc các bộ đệm được viết.

Tức là, bạn có thể cần phải "xả" đầu ra để làm cho nó được ghi vào luồng cơ bản (có thể là tệp hoặc trong ví dụ được liệt kê, thiết bị đầu cuối).

Nói chung, stdout/cout là dòng đệm: đầu ra không được gửi đến hệ điều hành cho đến khi bạn viết một dòng mới hoặc xóa bộ đệm một cách rõ ràng. Lợi thế là một cái gì đó như std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl chỉ gây ra một ghi vào "tệp" bên dưới thay vì sáu, đó là tốt hơn cho hiệu suất. Bất lợi là một cái gì đó như

for (int i=0; i<5; i++) { 
    std::cout << "."; 
    sleep(1); 
} 
std::cout << "\n"; 

sẽ xuấtcùng một lúc. Trong những trường hợp như vậy, bạn sẽ cần thêm << flush để đảm bảo rằng đầu ra được hiển thị.

Reading cin bừng cout do đó bạn không cần một tuôn ra rõ ràng để làm điều này:

std::string colour; 
std::cout << "Enter your favourite colour: "; 
std::cin >> colour; 
+0

Thực hiện việc này cho (int i = 0; i <5; i ++) {std :: cout << "."; ngủ (1); } std :: cout << std :: endl; không in ..... cùng một lúc. Nó in chúng với 1 mili giây ở giữa. Bạn sẽ nhận thấy nó nhiều hơn khi bạn sử dụng giấc ngủ (1000) –

+0

@MohamedAhmedNabil Bạn có vẻ bối rối 'sleep()' (POSIX) với 'Sleep()' (Windows) –

+0

bạn có thể giải thích sự khác biệt không? –

Các vấn đề liên quan