2012-01-08 43 views
8

Có một chủ đề đã có về chủ đề này nhưng tôi vẫn còn nghi ngờ. Để tính toán kích thước của một véc tơ, cái nào là đúng:sizeof() std :: vector (C++)

sizeof(VEC) + sizeof(int) * VEC.capacity() 

hoặc

VEC.capacity() * (sizeof(VEC) + sizeof(int)) 
+0

thể trùng lặp của [sizeof() một vector] (http://stackoverflow.com/questions/2373189/sizeof-a-vector) – Joe

+4

@jrok: Đó chỉ là một phỏng đoán, tùy thuộc vào cách thức hoạt động thực hiện . –

Trả lời

12

Ý anh là gì bởi kích thước của vector? Kích thước của các đối tượng vector chỉ là

sizeof(vec); 

Nếu bạn quan tâm đến bao nhiêu bộ nhớ vector đã cấp phát trên heap, bạn có thể sử dụng

vec.capacity()*sizeof(T) 

Vì vậy, nếu bạn thêm này, bạn' sẽ nhận được bao nhiêu bộ nhớ bạn đã "mất" vì vectơ.

vec.capacity()*sizeof(T) + sizeof(vec) 

Xin lưu ý rằng chính xác lượng bộ nhớ được phân bổ phụ thuộc vào việc triển khai thực hiện. Chỉ là công thức ở trên sẽ là thực tế là đúng (hoặc gần đúng) trên hầu hết nếu không phải tất cả các triển khai.

+1

Đó chỉ là phỏng đoán, tùy thuộc vào cách triển khai hoạt động. –

+9

@ Dietrich: Bạn có thực sự đọc câu trả lời của tôi không? –

+0

Tôi nghĩ rằng, với các ràng buộc về cách một 'vector' * có thể * được thực thi một cách hợp lệ, điều này cho phép * giới hạn dưới * chính xác về lượng bộ nhớ' vector' và nội dung của nó chiếm. +1. –

0

Nếu bạn muốn biết kích thước của dữ liệu chứa trong vector

std::vector<int> vec; 
... 
vec.size() * sizeof(decltype(bufferIn)::value_type)) 

Nếu loại được thay đổi từ int để nói dài không có gì dài khác đã được thay đổi. Tôi tìm thấy giải pháp này an toàn hơn sau đó một trong những cách sử dụng các loại trong sizeof bởi vì nó có thể dễ dàng được thay đổi mà không có khác.

std::vector<long long> vec; // lets go from int to int64 
... 
vec.size() * sizeof(int); // woops problem on the horizon 
Các vấn đề liên quan