如何对齐指针

2024-04-01

如何将指针与 16 字节边界对齐?

我找到了这段代码,不确定是否正确

char* p= malloc(1024);

if ((((unsigned long) p) % 16) != 0) 
{
     unsigned char *chpoint = (unsigned char *)p;        
     chpoint += 16 - (((unsigned long) p) % 16);
     p = (char *)chpoint;
}

这行得通吗?

thanks


C++0x提出std::align http://en.cppreference.com/w/cpp/memory/align,它就是这样做的。

// get some memory
T* const p = ...;
std::size_t const size = ...;

void* start = p;
std::size_t space = size;
void* aligned = std::align(16, 1024, p, space);
if(aligned == nullptr) {
    // failed to align
} else {
    // here, p is aligned to 16 and points to at least 1024 bytes of memory
    // also p == aligned
    // size - space is the amount of bytes used for alignment
}

这看起来非常低级。我认为

// also available in Boost flavour
using storage = std::aligned_storage_t<1024, 16>;
auto p = new storage;

也有效。如果您不小心,您很容易违反别名规则。如果您心里有一个精确的场景(在 16 字节边界上容纳 N 个 T 类型的对象?)我想我可以推荐一些更好的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对齐指针 的相关文章

随机推荐

  • 如何在 R 中获取整数哈希码?

    我想做的是在 R 中实现一个哈希技巧 代码如下 library digest a lt digest key a algo xxhash32 1 4da5b0f8 这返回了字符类型的哈希码 有什么办法可以把它变成整数吗 或者还有其他包可以实
  • 使用 Passport-facebook 从 Facebook 检索照片

    我可以通过 Passport facebook 检索基本用户信息 遵循以下代码并保存在 mongodb 中 app get auth facebook passport authenticate facebook scope email p
  • 从kafka主题中删除单个记录

    有没有办法从kafka主题中删除单个记录 我知道有一个脚本 kafka delete records sh 可以删除指定主题和分区上指定偏移量之前的记录 但我希望能够删除我指定的偏移量上的记录 有没有办法做到这一点 这不是在 Java 上
  • Python 输出格式

    你好 我搜索过输出格式 但格式没有成功 我找不到合适的文档 我真的想了解这段代码是如何工作的 如果有人可以启发我吗 print Survived i 1f len survived float len survived len train
  • 您是否必须 pickle 缩放器和 ML 模型才能部署?

    当使用 sklearn 训练 ML 模型时 我通常使用 sklearn 内置的 StandardScaler 首先将缩放器拟合到训练数据 然后转换训练数据 最后使用相同的 StandardScaler 对象来转换测试数据通过训练数据集中之前
  • \bin 中插入不需要的 SQLite

    我正在使用 Visual Studio 2010 并使用 Web 部署将 Net MVC 站点提升到特定环境 我安装了 Elmah 它在我的 DEV 环境中运行得很好 但是当我推送 TEST 时 我遇到了异常 因为 SQLite 不是一种好
  • Django - 使用子对象过滤查询集(ForeignKey)

    我有 3 个模型 其中 2 个对应第一个模型 class Parent models Model name models CharField class Child1 models Model parent models ForeignKe
  • C 语言中的“{0}”是什么?

    什么是char buf MAXDATASIZE 0 s 0 means 试图打印它 但它什么也没打印 include
  • 检查用户是否使用兼容模式的 IE

    我正在寻找一些代码 PHP 或 JavaScript 可以很好地检查查看页面的用户是否使用兼容模式 然后我可以使用该代码执行一些条件语句 或者基本上给他们一个通知以将其关闭 强迫他们 这将禁用兼容性视图 除非用户随后通过进入开发人员工具并进
  • Spring Security:多个ThreadLocals中有相同的SecurityContext实例,它是如何工作的?

    我有一些关于 Spring Security 3 0 5 和 SecurityContext 的问题 首先 我尝试总结一下我所知道的 SecurityContextHolder 存储 SecurityContext 在Request之间 S
  • 多个 socket.io 服务器共享单个 HTTP/S 服务器

    使用 ws Node js WebSocket 库 可以有多个服务器共享单个 HTTP S 服务器 https github com websockets ws multiple servers sharing a single https
  • iPhone Web 应用程序 - 接听电话时会话和当前 URL 丢失

    我有一个多页面网站 旨在作为 iPhone 上的网络应用程序运行 它具有通常的
  • 如何将 PIL.ImageTk.PhotoImage 保存为 jpg

    我想将 PIL ImageTk PhotoImage 保存到文件中 我的方法是创建一个 打开 文件并调用 写入 方法 但它不起作用 因为我不知道如何从对象获取字节数组 def store temp image data image new
  • 多部分/替代子类型,客户端何时使用它?

    为什么网络邮件 如 Gmail 使用以下方式发送 MIME 消息多部分 替代子类型 当用 HTML 编写时 而其他人将 HTML 作为 MIME 发送 其中包含文本 html 部分 不使用替代子类型 The 第5 1 4节 https ww
  • 复杂类型作为数组索引

    array 对象 obj other obj PHP 数组仅适用于标量数据类型 如 int string float boolean null 的索引 我不能像其他语言一样使用对象作为数组索引吗 那么如何实现对象 gt 对象映射呢 虽然我在
  • 在 Rust 中将递归函数转换为迭代器的技术?

    我正在努力将一个简单的递归函数变成一个简单的迭代器 问题在于递归函数在其局部变量和调用堆栈中维护状态 将其转换为 Rust 迭代器意味着基本上将所有函数状态外部化为某些自定义迭代器结构上的可变属性 这是一个相当混乱的尝试 在 javascr
  • Git Pull Force 覆盖本地文件

    Git 拉力 git 将分支重置到原点 或者换句话说 拉取远程分支以覆盖本地分支 似乎是一个被广泛搜索的功能 尽管本地搜索量很少下降 但人们的兴趣却越来越大 对于不断壮大的团队和不断增加的开发人员数量来说 这绝对有意义 目前 最短的工作解决
  • 如何将我的 Magento 迷你搜索表单移动到模板标题中的另一个位置?

    我正在构建我的第一个自定义 Magento 主题 虽然进展缓慢 但是is去 我去掉了主页上最初保存迷你搜索表单的栏 而是想将搜索表单放入新标题中 这是我的标题的代码header phtml div a href title class lo
  • Kafka应用程序启动时无法配置主题,但稍后可以通信

    我们有一个使用 spring kafka 2 2 5 RELEASE 的 Spring Boot 应用程序 在启动时总是出现此错误 Could not configure topics org springframework kafka K
  • 如何对齐指针

    如何将指针与 16 字节边界对齐 我找到了这段代码 不确定是否正确 char p malloc 1024 if unsigned long p 16 0 unsigned char chpoint unsigned char p chpoi