std :: vector _M_start和_M_finish是一样的

时间:2018-06-11 20:08:43

标签: c++ vector gdb stdvector

我正在调试GDB中的std::vector并且我无法告诉该向量是否相信其当前大小。向量声明为std::vector<custom_struct_t *> myVec;

(gdb) p myVec.size()
Cannot evaluate function -- may be inlined

检查载体:

(gdb) p myVec
[...]
    _M_impl = {
      [...]
      _M_start = 0x8052a0500, 
      _M_finish = 0x8052a0500, 
      _M_end_of_storage = 0x8052a0600
    }
  }, <No data fields>}

我在此处看到_M_start_M_finish的值相同。这是零长度向量还是一长向量的指示?

1 个答案:

答案 0 :(得分:4)

对于libstdc ++(gcc)实现,这表示0大小的向量,由std::vector::size()函数证明:

size_type
size() const _GLIBCXX_NOEXCEPT
{ return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }

此源代码可在GCC online documentation

中找到