小编Nik*_*ita的帖子

size_t和内存分配

有这样一种类型std::size_t.它可以用于描述对象的大小,因为它可以保证能够表达任何对象的最大大小(因此在这里写).但是,这是什么意思?我们实际上没有内存中的对象.那么这是否意味着这种类型可以存储一个整数,代表我们理论上可以使用的最大内存量?

如果我尝试写类似的东西

size_t maxSize = std::numeric_limits<std::size_t>::max();
new char[maxSize];
Run Code Online (Sandbox Code Playgroud)

我会得到一个错误,因为数组的总大小限制为0x7fffffff.为什么?而且,如果我传递一个等于的非常量表达式maxSize,std::bad_array_new_length将被抛出.如果我传递的表达式小于maxSize但仍然大于0x7fffffff,std::bad_alloc则会抛出.我想这std::bad_alloc是因为内存不足而引发的,不是因为大小大于0x7fffffff.为什么会这样?我想如果我们分配的内存大小大于0x7fffffff(这是在编译时传递给new []的const的最大值),抛出一个特殊异常是很自然的.为什么std::bad_array_new_length只有在我通过时才被抛出maxSize?这种情况特别吗?

顺便说一下,如果我将maxSize传递给vector的构造函数,如下所示:

vector<char> vec(maxSize);
Run Code Online (Sandbox Code Playgroud)

std::bad_alloc将被抛出,而不是std::bad_array_new_length.这是否意味着vector使用不同的分配器?

我正在尝试自己实现数组.使用unsigned int来存储大小,容量和索引是一种糟糕的方法.所以定义一些这样的别名是个好主意:

typedef std::size_t size_type;
Run Code Online (Sandbox Code Playgroud)

size_type而不是unsigned int

c++ memory-management c++11

6
推荐指数
1
解决办法
891
查看次数

C++ extern链接

我想尝试外部链接和不完整的类型声明,并写了这个例子:

Source.cpp:

//Source.cpp
class A {
public: 
   int a=10;
};

A* var1 = new A();

void printA(A* arg)
{
    cout << arg->a << endl;
}
Run Code Online (Sandbox Code Playgroud)

Source1.cpp:

//Source1.cpp
class A
{
public:
    int b = 20;
    int c = 30;
};

A* var2 = new A();

void printB(A* a)
{
    std::cout << a->b;
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中:

//main.cpp   
class A;
extern A* var1;
extern A* var2;
int main()
{
    void printA(A*);
    void printB(A*);
    printA(var1); //Prints 10
    printA(var2); //Prints 10
    printB(var2); //Prints 10
    return …
Run Code Online (Sandbox Code Playgroud)

c++ extern incomplete-type

3
推荐指数
2
解决办法
61
查看次数

拥有自定义矢量类.内存重新分配

我想实现我自己的简单矢量类.T即使保留的内存耗尽,此向量也应支持推送新元素(类型).所以,我需要分配一个新的内存块,复制元素,然后释放旧的内存块.

如果我使用new T[]然后创建一个内存块,那么我必须使用它来释放它delete[],这将使向量中的每个元素的构造函数被调用.我不希望这样,因为我想到只使用复制旧矢量memcpy().

所以我想出了一个决定是分配内存使用new char[]并使用placement new来填充数组.当我需要重新分配保留的内存时,我只是memcpy()在该内存块上使用,然后使用它来释放它delete[].

这是合理的解决方案吗?

c++ memory memory-management vector

3
推荐指数
1
解决办法
73
查看次数