- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 C++ 编写一个句柄分配器。该分配器将“处理”(hue hue hue) 游戏引擎中引用 Assets (如纹理、制服等)的句柄分配。例如,在创建纹理的函数中,将调用句柄分配器来创建一个 TextureHandle。当纹理被销毁时,句柄分配器将释放 TextureHandle。
我正在阅读 BX 的来源,一个包含用于此目的的句柄分配器的库 - 它是流行库的基础库 BGFX ,对不同渲染 API 的跨平台抽象。
在开始解释令我困惑的事情之前,让我先概述一下这个类的本质:
class HandleAllocator {
public:
constructor, destructor
getters: getNumHandles, getMaxHandles
u16 alloc();
void free(u16 handle);
bool isValid(u16 handle) const;
void reset();
private:
u16* getDensePointer() const;
u16* getSparsePointer() const;
u16 _numHandles;
u16 _maxHandles;
}
这是 getDensePointer() 的样子:
u8* ptr = (u8*)reinterpret_cast<const u8*>(this);
return (u16*)&ptr[sizeof(HandleAlloc)];
据我所知,这个函数返回一个指向内存中类末尾的指针,虽然我不明白为什么 this 指针在之前首先被转换为 uint8_t*被取消引用并在下一行与数组索引运算符一起使用。
这就是我觉得奇怪的地方。构造函数调用 reset() 函数,如下所示。
_numHandles = 0;
u16* dense = getDensePointer();
for(u16 ii=0, num = _maxHandles; ii < num; ++ii) {
dense[ii] = ii;
}
如果 getDensePointer 返回一个指向内存中类末尾的指针,那么在此 for 循环中写入类末尾以外的内存如何安全?我怎么知道这不是踩到存储在它附近的东西?
我完全是个菜鸟,我意识到这个问题的答案可能很明显,并且暴露出我完全缺乏知识,但是对我放宽点..
最佳答案
要回答第一个问题,问问自己为什么指针有类型。最后,它们只是用来存储内存地址的变量。任何范围大到足以存储所有可能的内存地址的变量都可以。比方说,int*
和 u8*
之间有什么区别?
区别在于对它们执行操作的方式。除了取消引用(这是另一回事)之外,还涉及指针运算。让我们采用以下声明: int *p; u8 *u;
。现在,p+2
为了有意义,将返回 p+8 处的地址(第二个整数的地址,如果您愿意的话),而 u+2 将返回u+2(因为 u8 的大小为 1)。
现在,sizeof 以字节为单位为您提供类型的大小。你想移动 sizeof(x) 字节,所以你需要在字节大小的数据类型上索引数组(或做指针算术,它们在这里是等价的)。这就是将其转换为 u8
的原因。
现在,对于第二个问题,
how do i know this isn't stomping on something stored adjacent to it?
只需确保那里没有任何东西。这是在创建处理程序期间完成的。例如,如果您有:
HandleAllocator *h = new HandleAllocator[3]
您可以在 h[0] 上自由调用 reset 并有 2 个值得内存的处理程序可以使用。如果没有更多细节,很难说出这些多余内存的确切分配方式及其用途。
关于c++ - 具有密集和稀疏指针的分配器 - 发生了什么事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766837/
我在服务器上 checkout 了一个 git 存储库。该存储库过去在根目录下包含所有相关文件,但我必须进行一些更改,现在我有两个文件夹,src 和 dist,我想跟踪这两个文件夹. 我遇到的问题是,
我很难弄清楚 VkDescriptorSetLayoutBinding::binding 的任何用例,这是结构: struct VkDescriptorSetLayoutBinding { u
Python中能否有效获取稀疏向量的范数? 我尝试了以下方法: from scipy import sparse from numpy.linalg import norm vector1 = spa
我正在尝试找出为什么这段代码不对数组进行排序... 任意向量。 x = array([[3, 2, 4, 5, 7, 4, 3, 4, 3, 3, 1, 4, 6, 3, 2, 4, 3, 2]])
有谁知道如何压缩(编码)稀疏 vector ?稀疏 vector 表示有许多“0”的 1xN 矩阵。 例如 10000000000001110000000000000000100000000 上面是稀
我使用稀疏高斯过程进行 Rasmussen 回归。[http://www.tsc.uc3m.es/~miguel/downloads.php][1] 预测平均值的语法是: [~, mu_1, ~, ~
我在朴素贝叶斯分类器中使用 Mahout API。其中一个功能是 SparseVectorsFromSequenceFiles虽然我已经尝试过旧的谷歌搜索,但我仍然不明白什么是稀疏 vector 。最
我正在尝试将JavaScript稀疏数组映射到C#表示形式。 建议这样做的方法是什么? 它正在考虑使用一个字典,该字典包含在原始数组中包含值的原始词列表。 还有其他想法吗? 谢谢! 最佳答案 注意 针
如果我想求解一个完整上三角系统,我可以调用linsolve(A,b,'UT')。然而,这目前不支持稀疏矩阵。我该如何克服这个问题? 最佳答案 UT 和 LT 系统是最容易解决的系统之一。读一读on t
我有一个带有 MultiIndex 的 Pandas DataFrame。 MultiIndex 的值在 (0,0) 到 (1000,1000) 范围内,该列有两个字段 p 和 q. 但是,DataF
我目前正在实现一个小型有限元模拟。使用 Python/Numpy,我正在寻找一种有效的方法来创建全局刚度矩阵: 1)我认为应该使用coo_matrix()从较小的单元刚度矩阵创建稀疏矩阵。但是,我可以
a , b是 1D numpy ndarray与整数数据类型具有相同的大小。 C是一个 2D scipy.sparse.lil_matrix . 如果索引[a, b]包含重复索引,C[a, b] +=
我有一个大的、连通的、稀疏的邻接表形式的图。我想找到两个尽可能远的顶点,即 diameter of the graph以及实现它的两个顶点。 对于不同的应用程序,我对无向和有向情况下的这个问题都很感兴
上下文:我将 Eigen 用于人工神经网络,其中典型维度为每层约 1000 个节点。所以大部分操作是将大小为 ~(1000,1000) 的矩阵 M 与大小为 1000 的 vector 或一批 B v
我有一些大小合适的矩阵 (2000*2000),我希望在矩阵的元素中有符号表达式 - 即 .9**b + .8**b + .7**b ... 是一个元素的例子。矩阵非常稀疏。 我通过添加中间计算来创建
在 R 或 C++ 中是否有一种快速填充(稀疏)矩阵的方法: A, B, 0, 0, 0 C, A, B, 0, 0 0, C, A, B, 0 0, 0, C, A, B 0, 0, 0, C, A
我有一个大的稀疏 numpy/scipy 矩阵,其中每一行对应于高维空间中的一个点。我想进行以下类型的查询: 给定一个点P(矩阵中的一行)和一个距离epsilon,找到与epsilon距离最大的所有点
假设我有一个 scipy.sparse.csr_matrix 代表下面的值 [[0 0 1 2 0 3 0 4] [1 0 0 2 0 3 4 0]] 我想就地计算非零值的累积和,这会将数组更改为:
我了解如何在 Git 中配置稀疏 checkout ,但我想知道是否可以消除前导目录。例如,假设我有一个 Git 存储库,其文件夹结构如下: 文件夹1/foo 文件夹2/foo/bar/stuff 文
根据 this thread , Git 中的排除 sparse-checkout feature应该实现。是吗? 假设我有以下结构: papers/ papers/... presentations
我是一名优秀的程序员,十分优秀!