标签: allocation

为什么这个C++ STL分配器不分配?

我正在尝试编写一个派生自定义的STL分配器std::allocator,但不知何故所有调用都要allocate()转到基类.我把它缩小到这段代码:

template <typename T> class a : public std::allocator<T> {
public:
    T* allocate(size_t n, const void* hint = 0) const {
        cout << "yo!";
        return 0;
    }
};

int main()
{
    vector<int, a<int>> v(1000, 42);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期待"哟!" 打印,然后是一些可怕的错误,因为我实际上没有分配任何东西.相反,该程序运行良好,并没有打印.我究竟做错了什么?

我在gcc和VS2008中得到了相同的结果.

c++ stl allocation

12
推荐指数
2
解决办法
6746
查看次数

如何在C++中分配2D指针数组

我正在尝试使指针指向2D数组指针.什么是语法以及如何访问元素?

c++ pointers allocation multidimensional-array

12
推荐指数
3
解决办法
5万
查看次数

预约分配算法

我正在寻找用于为资源分配预留的算法.这可能是与可用房间相匹配的酒店预订 - 与可用会议室相匹配的会议预订 - 与桌子相匹配的餐厅预订.

他们有什么共同点:

  • 每个预订都有一个特定的不可更改的开始和结束时间.
  • 每个预留都不会在开始时间之前绑定到特定资源.
  • 可以有不同数量的资源.
  • 每次新预订到来时,算法至少应该能够检查是否可以匹配资源.

到目前为止,我主要研究了遗传算法的方法来解决这个问题,但是我无法将问题编码到染色体上.

对此算法的任何想法都是受欢迎的,也是唯一能找到"好"解决方案而不是最佳解决方案的算法.

algorithm allocation

12
推荐指数
2
解决办法
9765
查看次数

如何在低内存条件下在C++中正确分配内存

我已经看到资源显示了两种分配内存的方法,同时确保有足够的内存来完成操作.

1)在try/catch中包装'new'操作,因为它将返回std :: bad_alloc(?)

try { ptr = new unsigned char[num_bytes]; } catch(...) {}
Run Code Online (Sandbox Code Playgroud)

2)在'new'操作后检查指定的指针是否为null.

ptr = new unsigned char[num_bytes]; if(ptr == NULL) { ... }
Run Code Online (Sandbox Code Playgroud)

哪一个是对的?他们都工作吗?我是否需要同时做1和2?

谢谢,

JBU

c++ memory allocation exception

12
推荐指数
2
解决办法
521
查看次数

为什么有堆栈和堆?

汇编语言为什么同时使用堆栈和堆?他们似乎多余.

memory heap stack allocation

12
推荐指数
1
解决办法
1584
查看次数

如何预分配(保留)priority_queue <vector>?

如何std::priority_queue使用类型的容器预分配std::vector

std::priority_queue<unsigned char, std::vector<unsigned char>> pq;
pq.c.reserve(1024);
Run Code Online (Sandbox Code Playgroud)

不编译,因为底层向量是受保护的成员.是否可以使用它的构造函数将priority_queue其包装在预先保留的向量周围?

c++ allocation vector std priority-queue

12
推荐指数
2
解决办法
3068
查看次数

C++中的错误分配异常

在我的一个学校项目中,我被要求创建一个不使用STL的程序.
在程序中我使用了很多

Pointer* = new Something;
if (Pointer == NULL) throw AllocationError();
Run Code Online (Sandbox Code Playgroud)

我的问题是关于分配错误:
1.当分配失败时,是否有新的自动异常?
2.如果是这样,如果我没有使用STL( 3 #include "exception.h)我怎么能抓住它?是否
正在使用NULL测试?

谢谢.
我在Windows 7上使用eclipseCDT(C++)和MinGW.

c++ mingw allocation exception new-operator

11
推荐指数
2
解决办法
5万
查看次数

可编辑的javascript图表 - 交互式调整条形图或饼图部分

我需要一个库或框架插件,可以通过调整图表本身的大小来绘制可以实时修改的图表.有这样的事吗?

我打算用它来调整图表值.主要用于控制金额分配.

例如.你有4个小时,你有5种不同类型的任务.我希望用户能够为每个任务分配时间,并直观地看到对可用时间的影响.

javascript jquery charts controls allocation

11
推荐指数
2
解决办法
5127
查看次数

为什么C标准中没有"recalloc"?

每个人都知道:

  • realloc 调整现有内存块的大小或将其复制到更大的块.
  • calloc 确保内存归零并防止算术溢出,并且通常面向大型阵列.

为什么C标准没有提供如下结合上述两者的功能?

void *recalloc(void *ptr, size_t num, size_t size);
Run Code Online (Sandbox Code Playgroud)

调整大型哈希表或自定义内存池的大小不是很有用吗?

c malloc allocation realloc calloc

11
推荐指数
2
解决办法
3659
查看次数

计算事先不知道长度的矢量 - 我应该"增长"吗?

我需要计算一个长度我事先不知道的向量条目.如何有效地做到这一点?

一个简单的解决方案是"增长"它:从一个小的或空的向量开始,并连续添加新的条目,直到达到停止标准.例如:

foo <- numeric(0)
while ( sum(foo) < 100 ) foo <- c(foo,runif(1))
length(foo)
# 195
Run Code Online (Sandbox Code Playgroud)

然而,出于性能原因,R中的"增长"载体是不受欢迎的.

当然,我可以"以块的形式增长":预先分配一个"大小合适"的矢量,填充它,当它满时加倍它的长度,最后将其缩小到大小.但这感觉容易出错,并且会产生不优雅的代码.

有没有更好或规范的方法来做到这一点?(在我的实际应用中,当然,计算和停止标准有点复杂.)


回复一些有用的评论

即使您事先不知道长度,您是否知道它理论上可能具有的最大长度?在这种情况下,我倾向于使用该长度初始化向量,并且在循环切割NA之后或基于最新的索引值移除未使用的条目.

不,事先不知道最大长度.

随着向量的增长,你需要保留所有的值吗?

是的,我愿意.

那么rand_num <- runif(300); rand_num[cumsum(rand_num) < 100]你选择一个足够大的向量,你知道条件满足的概率很高吗?你当然可以检查一下,如果不符合则使用更大的数字.我已经测试过,直到runif(10000)它仍然比"增长"更快.

我的实际用例涉及动态计算,我不能简单地向量化(否则我不会问).

具体来说,为了近似负二项式随机变量的卷积,我需要计算2007年Furman中定理2中整数随机变量$ K $的概率质量,直到高累积概率.这些质量$ pr_k $涉及一些错综复杂的递归总和.

performance allocation r vector

11
推荐指数
1
解决办法
219
查看次数