簡體   English   中英

C ++向量的內存分配<bool>

[英]Memory allocation of C++ vector<bool>

C ++ STL中的vector<bool>類針對內存進行了優化,以便為每個存儲的bool分配一個位,而不是一個字節。 每次我為vector<bool> x輸出sizeof(x) ,結果是40個字節,創建了向量結構。 sizeof(x.at(0))始終返回16個字節,該字節必須是許多bool值的分配內存,而不僅僅是在零位置的那個。 16個字節覆蓋多少個元素? 128到底是什么? 如果我的向量具有更多或更少的元素怎么辦?

我想測量向量的大小及其所有內容。 我將如何准確地做到這一點? 是否有C ++庫可用於查看每個變量分配的內存?

我認為沒有任何標准方法可以做到這一點。 vector<bool>實現提供給您的有關其工作方式的唯一信息是reference成員類型,但是沒有理由假定這與數據在內部的實際存儲方式完全一致。 當您將迭代器取消引用到容器中時,只是獲得了一個reference

因此,您已經有了容器本身的大小,這很好,但是要獲取數據占用的內存量,您將必須檢查實現的標准庫源代碼並從中獲取解決方案。 雖然,老實說,這似乎是一件很奇怪的事情。

實際上,首先使用vector<bool>是一件很奇怪的事情。 以上所有這些基本上就是為什么如今它的使用被皺眉的原因:它幾乎完全與其他標准容器設置的約定不兼容,甚至與其他vector專業設置的約定也不兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM