标签:c vector optimization memory-management new-operator
这是一个相当学术性的问题,我意识到它在优化方面很少,但它只是出于兴趣.
据我所知,当你调用new [size]时,会分配额外的空间来存储分配的数组的大小.调用delete []时就是这样,知道可以释放多少空间.
我所做的是写了我认为矢量大致可以实现的方式:
#include <cstddef>
template <class T>
class Vector
{
public:
struct VectorStorage
{
std::size_t size;
T data[];
};
Vector(std::size_t size) : storage(new VectorStorage[size])
{
storage->size = size;
}
std::size_t size()
{
return storage->size;
}
~Vector()
{
delete[] storage;
}
private:
VectorStorage* storage;
};
据我所知,大小存储两次.一旦进入VectorStorage对象(因为它需要,所以size()函数可以工作)但是再次以编译器的隐藏方式,所以delete []可以工作.
似乎大小存储了两次.这是不可避免的情况,还是有办法确保只存储一次大小?
解决方法:
std :: vector不分配内存; std :: allocator,或者你赋予向量的任何分配器,就是分配内存的东西.分配器接口被赋予分配/解除分配的项目数,因此不需要实际存储它.
标签:c,vector,optimization,memory-management,new-operator 来源: https://codeday.me/bug/20190723/1514955.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。