作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


使用golang来调用SIMD指令,发现程序崩溃了:

__m128i xx =  _mm_load_si128((const __m128i_u *)p);

golang中的崩溃信息为:

unexpected fault address 0xffffffffffffffff
fatal error: fault
[signal 0xc0000005 code=0x0 addr=0xffffffffffffffff pc=0x1138995] goroutine 19 [running]:
runtime.throw({0x1183aff?, 0xc000085860?})
C:/Go/src/runtime/panic.go:992 +0x76 fp=0xc000051e50 sp=0xc000051e20 pc=0xfe89f6
runtime.sigpanic()
C:/Go/src/runtime/signal_windows.go:261 +0x125 fp=0xc000051e98 sp=0xc000051e50 pc=0xffd0c5

传入C代码的指针为:

a := make([]byte, 0, 100)
ptr := unsafe.Pointer(&a[0])
__c_func(uintptr(ptr))

把指针按照8字节对齐,就不会崩溃了:

pointerValue := uint64(uintptr(ptr))
pointerValue = (pointerValue+7)/8*8
__c_func(uintptr(pointerValue))

结论:

  • golang中分配的对象,看起来是按照4字节对齐的
  • 使用SSE指令中的对齐加载,地址一定要按照8字节对齐

【小实验】golang中的字节对齐的更多相关文章

  1. C语言中的字节对齐以及其相关处理

    首先,我们来了解下一些基本原理: 一.什么是字节对齐一个基本类型的变量在内存中占用n个字节,则该变量的起始地址必须能够被n整除,即: 存放起始地址 % n = 0,那么,就成该变量是字节对齐的;对于结 ...

  2. C++中的字节对齐分析

    struct A { int a; char b; short c; }; struct B { char a; int b; short c; }; #pragma pack(2) struct C ...

  3. C++中的字节对齐

    本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一.小鱼)相关研究.学习内容所做的笔记,欢迎广大朋友指正! 字节对齐 1. 基本概念字节对齐:计算机存 ...

  4. C语言中的字节对齐

    下面这个篇博客讲解很好 http://blog.csdn.net/meegomeego/article/details/9393783 总的来看分三类: 1. 不加 #pragma pack(n)伪指 ...

  5. ACE的CDR中的字节对齐问题

    大家应该都知道计算机中间都有字节对齐问题.CPU访问内存的时候,如果从特定的地址开始访问一般可以加快速度,比如在32位机器上,如果一个32位的整数被放在能被32模除等于0的地址上,只需要访问一次,而如 ...

  6. golang中uint8字节切片转字符串

    假如拿到了一个字节切片test1 = {'a', 'b', 'c', 'd', 11} package main import ( "fmt" "reflect" ...

  7. golang中字符串-字节切片,字符串-字符切片的互转

    package main import ( "fmt" "reflect" ) func B2S(bs []uint8) string { // 将字节切片转换 ...

  8. 关于sizeof与#pragma pack 以及网络上关于字节对齐的一点感想

    工作中面试中对于字节对齐基本上是必考一个知识点,而很多面试是网络上上原题.基本上背一背就可以写正确,而关于4字节对齐我相信很多人也只是一个基本地了解,对于一些题目就感觉有问题,而且很多blog后面仍然 ...

  9. c++内存中字节对齐问题详解

    一.什么是字节对齐,为什么要对齐?    现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址 ...

  10. Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)

    在windows下设置字节对齐大小的方式,目前我了解有三种: 1. 在编译程序时候的编译选项  /Zp[n],如 cl /Zp4 表示对齐大小是4字节: 2. 预处理命令   #pragma pack ...

随机推荐

  1. 万字保姆级长文——Linkedin元数据管理平台Datahub离线安装指南

    ​ 元数据管理平台Datahub最近的热度越来越高.已经更新到了0.8.40的版本,来咨询我的小伙伴也越来越多,特别是安装过程有很多问题. ​ 考虑到有些企业部分数据服务是部署在内网的,那么离线安装D ...

  2. 学习 Java 还是 Solon 简单,v1.9.0 发布

    入手很简单哦: pom.xml 添加依赖 <dependency> <groupId>org.noear</groupId> <artifactId>s ...

  3. 远程桌面CredSSP 加密数据库修正

    如图所示: 远程桌面连接,出现身份验证错误,要求的函数不受支持,这可能是由于 CredSSP 加密数据库修正

  4. BBS项目(二):首页导航条搭建 修改密码功能 首页数据展示 个人站点页面

    目录 首页导航条搭建 session判断用户是否登录 更换验证码 导航条更多功能 退出系统 修改密码前端页面 使用大模态框 编写模态框 前端表单编写 修改密码后端逻辑 接受参数 验证参数 修改密码 首 ...

  5. Android 编译线程爆了, gradle 内存 OOM 解决之路

    本文首发我的微信公众号徐公,收录于 Github·AndroidGuide,这里有 Android 进阶成长知识体系, 希望我们能够一起学习进步,关注公众号徐公,5 年中大厂程序员,一起建立核心竞争力 ...

  6. Java 使用 slf4j + log4j 写日志

    没有SpringBoot等框架的情况下 pom.xml: <properties> <slf4j.version>1.7.26</slf4j.version> &l ...

  7. 它来了!真正的 python 多线程

    哈喽大家好,我是咸鱼 几天前,IBM 工程师 Martin Heinz 发文表示 python 3.12 版本回引入"Per-Interpreter GIL",有了这个 Per-I ...

  8. scrollIntoView页面滑动特效

    点击左侧的菜单,页面平滑滚动:

  9. BFS(广度优先搜索) poj3278

    ***今天发现一个很有趣的是,这道题应该几个月前就会了,但是一次比赛中总是WA,果断C++提交,然后就过了,然后就很无语了,G++不让过C++能过,今天又交一遍发现把队列定义为全局变量就都能过了,至于 ...

  10. Kubernetes 网络:Pod 和 container 的那点猫腻

    1. Kubernetes 网络模型 在 Kubernetes 的网络模型中,最小的网络单位是 Pod.Pod 的网络设计原则是 IP-per-Pod,即 Pod 中 container 共享同一套网 ...