当前位置: 首页 > 知识库问答 >
问题:

为什么Malloc()关心边界对齐?

仲孙兴平
2023-03-14

我不得不问:从逻辑上讲,为什么地址边界本身在什么上可分很重要?使用地址129上的整数将一组内存分配给n*sizeof(int)的调优有什么问题?

我知道指针算术是如何工作的*(integer+1),但我无法计算边界的重要性······

共有1个答案

通飞尘
2023-03-14

分配的内存将根据指针的数据类型对齐。

如果您谈论的是malloc,这是假的。malloc并不关心如何处理数据,而是分配内存,使其符合最严格的实现本机类型。

来自标准:

 类似资料:
  • 问题内容: 我写了一个简单的基准测试,以找出在通过按位和计算数组时是否可以消除边界检查。基本上,这就是几乎所有哈希表的作用:它们计算 作为一个指数到的,其中是或派生值。该结果表明,范围检查没有得到消除。 我的基准测试的想法很简单:计算两个值和,保证两个值都是有效的数组索引。 是循环计数器。当它用作数组索引时,将取消边界检查。 将计算为,其中每次迭代中都有一些值更改。当它用作数组索引时,不会消除边界

  • 问题内容: 什么回报? 答案会一样吗? Linux GCC的输出: 输出每次都会保持变化。这是标准答案吗?为什么除了学术研究之外,还有谁会对获得这样的指示感兴趣? 编辑: 如果返回伪指针,则以下内容如何工作: 编辑: 以下代码为每次迭代输出“可能”。为什么不失败? 问题答案: 其他人已经回答了如何工作。我将回答您提出的尚未回答的问题之一(我认为)。问题是关于: 什么回报?答案会一样吗? 该标准规定

  • 我有以下代码: 游戏场 导致此错误的原因: 为什么这是不可能的?当我删除绑定时,它就可以工作了,但是我不能使用泛型使函数对调用者更舒适。 这不是重复为什么trait中的泛型方法需要调整trait对象的大小?这会询问为什么不能从trait对象调用。我不是在问为什么需要边界;这一点已经讨论过了。

  • 我有一个图像压缩应用程序,现在有两个不同版本的内存分配系统。在最初的一个例子中,malloc无处不在,在第二个例子中,我实现了一个简单的池分配器,它只分配大块内存,并将部分内存返回给myalloc()调用。 我们注意到,使用malloc时会产生巨大的内存开销:在内存使用量最大的时候,malloc()代码对于1920x1080x16bpp映像需要大约170 MB的内存,而池分配器只分配48 MB,其

  • 问题内容: 具体来说,在关系数据库管理系统中,为什么我们在创建时需要知道列的数据类型(更可能是对象的属性)? 对我来说,数据类型感觉就像是一种优化,因为可以以多种方式实现一个数据点。将语义角色和约束分配给数据点,然后让引擎在内部检查和优化哪种数据类型最能为用户服务会更好吗? 我怀疑这是繁重的工作,为什么只问用户而不是做工作就更容易了。 你怎么认为?我们要去哪里?这是现实的期望吗?还是我有一个错误的

  • 结构体定义和构造函数 简单的边界盒结构体,存储着left,bottom,right,top等值。 typedef struct cpBB{ cpFloat l, b, r ,t; } cpBB 便捷的构造函数,如cpv()函数一样返回一个副本而不是一个申请的指针。 cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r,