gpt4 book ai didi

c++ - 使用 std::vector 管理映射内存 (glMapBuffer)

转载 作者:搜寻专家 更新时间:2023-10-31 01:59:18 26 4
gpt4 key购买 nike

我突然想到用 std::vector 管理一系列映射内存(来自 glMapBuffer)是个好主意。

// map data to ptr
T* dataPtr = (T*)glMapBuffer(this->target, access);

[... debug code ...]

// try to construct a std::vector from dataPtr
T* dataPtrLast = dataPtr + size;
mappedVector = new std::vector<T>(dataPtr, dataPtrLast);

问题是内存范围不会被直接使用,而是被复制到 vector 中。

我的问题是:是否可以让 vector 只“使用”映射的内存范围。 (理想情况下在调整大小/保留时抛出异常)或者是否有任何其他标准容器可以完成此任务?

亲切的问候,弗洛里安

最佳答案

不,这是有充分理由的。这段代码永远行不通。例如,您可以更改 MapBuffer 并打破 vector 内的大小/容量值。您可能会插入 vector 并导致访问冲突/段错误。您可能会导致调整大小,从而破坏缓冲区。而且,从根本上说,如果它已经在一个连续的数组中,那有什么好处呢?我想您可以为固定长度的数组滚动自定义容器。

特别!如果您已经有一对指针来充当迭代器。

关于c++ - 使用 std::vector 管理映射内存 (glMapBuffer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com