Tôi đang cố gắng tìm hiểu thêm một chút về chuỗi C++.Hiểu hiệu quả của một tiêu chuẩn :: string
xem xét
const char* cstring = "hello";
std::string string(cstring);
và
std::string string("hello");
Am I correct trong giả định rằng cả hai cửa hàng "hello" trong phần .data của một ứng dụng và các byte sau đó sao chép sang khu vực khác trên heap nơi con trỏ được quản lý bởi std :: string có thể truy cập chúng?
Làm cách nào để lưu trữ hiệu quả chuỗi dài thực sự? Tôi đang suy nghĩ về một ứng dụng đọc dữ liệu từ một dòng socket. Tôi sợ ghép nối nhiều lần. Tôi có thể tưởng tượng bằng cách sử dụng một danh sách liên kết và đi qua danh sách này.
Chuỗi đã đe dọa tôi quá lâu!
Mọi liên kết, mẹo, giải thích, chi tiết bổ sung, sẽ cực kỳ hữu ích.
Thời gian thực sự dài bao lâu? 10 MB? 20 có lẽ? Hay bạn có ý nghĩa gì đó giống như 10 GB? Máy tính có gigabyte RAM trong những ngày này. –
Tôi đã suy nghĩ nhiều hơn 10-100 MB. Tuy nhiên, điều này được dự định là một câu hỏi mở, vì vậy hãy giải thích một trong hai =). Tôi khá chắc chắn do quản lý bộ nhớ hệ điều hành bạn không thể phân bổ 10GB bộ nhớ tiếp giáp. Tôi giả định một danh sách sẽ được yêu cầu cho một kích thước như vậy. – flumpb
@kispit - Trên máy tính 64 bit của tôi, tôi có thể cấp phát bộ nhớ cho đến khi tệp hoán đổi lấp đầy đĩa cứng. Hàng chục GB là không có vấn đề! –