2009-02-17 22 views
23

Chi phí bộ nhớ của việc có một véc tơ trống là gì khi có một con trỏ tới một véc-tơ?Chi phí trên không của một véc tơ trống là gì?

Lựa chọn A:

std::vector<int> v; 

Lựa chọn B:

std::vector<int> *v = NULL; 

Tôi tin rằng tùy chọn B mất 1 32 con trỏ chút (giả sử 32 bit đây) Bao nhiêu bộ nhớ hiện rỗng 'v' nhặt lên?

+0

Thật tuyệt khi biết bạn đang cố gắng làm gì với câu hỏi này. Bạn đang tìm kiếm để tạo ra một mảng của họ, và muốn biết bao nhiêu không gian bạn tiết kiệm bằng cách làm cho nó một mảng các con trỏ? Nếu có, có thể có một số vấn đề khác bạn nên biết. –

Trả lời

0

Phụ thuộc thực hiện, có thể là một con trỏ và hai số nguyên cho kích thước và dung lượng hiện tại.

5

std::vector v; chiếm không gian sizeof(v). Nó có thể khác nhau bằng cách thực hiện, do đó, chạy nó và tìm ra bao nhiêu nó cần cho bạn.

+0

Và điều gì về bộ nhớ động được sử dụng nội bộ bởi vector? –

+1

Một vector được xây dựng mặc định không có kích thước và không bao giờ có bất kỳ kích thước nào, do đó, nó sẽ không có phân bổ động. –

12

Phụ thuộc hoàn toàn vào việc triển khai và bạn không nên giả sử cũng không dựa vào chi tiết. Đối với những gì nó có giá trị của nó 20-byte bằng cách sử dụng VC.

+0

Trên GCC 4.6, nó là 12 byte. Tôi sẽ giả định 4 byte cho con trỏ, 4 byte cho kích thước và 4 byte cho dung lượng. – Joel

31

Đối với câu hỏi được hỏi: Tùy thuộc vào việc triển khai. Với MSVC 7.1:

std:: cout << sizeof(std::vector<int>) << std::endl; 

cho tôi 16 (byte). (3 gợi ý: bắt đầu, kết thúc, và kết thúc của năng lực, cộng với một cấp phát)

Tuy nhiên cần lưu ý rằng các vector trỏ-to-cung cấp cho nó một overhead lớn hơn:

  • trong cả thời gian và khoảng trống trong trường hợp không trống
  • về độ phức tạp trong mọi trường hợp.
+3

điểm cuối cùng là rất tốt. 1 cho rằng –

+0

Tại sao một con trỏ-to-vector có một chi phí lớn hơn? –

+0

@Legate: beause bạn phải thêm kích thước của con trỏ chính nó vào kích thước của vector –

3

VS2005:

std::vector<int> *ptrToVec = new std::vector<int>(); 
std::vector<int> vecOfInt; 

sizeof(ptrToVec) = 4 
sizeof(vecOfInt) = 20 

Cảm ơn!

1

Trong Visual Studio 2017 Cộng đồng (Phiên bản 15,2), chạy mã này:

#include <iostream> 
#include <vector> 

using namespace std; 

void main() 
{ 
    vector<float> test; 
    vector<float>* test2 = &test; 
    cout << sizeof(test) << "\n"; 
    cout << sizeof(test2) << "\n"; 

    cout << "\n"; 
    system("pause"); 
} 

Chạy trong 32 bit (x86), tôi nhận được 16 byte cho vector và 4 byte cho con trỏ vector.

Chạy ở 64 bit (x64), tôi nhận được 32 byte cho vectơ và 8 byte cho con trỏ vectơ.

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