Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SSE中内存对齐导致的分段故障

SSE中内存对齐导致的分段故障
EN

Stack Overflow用户
提问于 2010-12-17 07:02:41
回答 4查看 3.8K关注 0票数 0

我正在研究人脸检测,其中我将输入作为.bmp文件,并检测人脸并在人脸上绘制一个矩形。

但是当我添加一个名为"cvDetect“的函数来检测人脸时,我得到了一些分割错误,在下面的代码行中-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_mm_store_ps(&c(y, 4.0*x), _mm_sub_ps(_mm_load_ps(a.data(y, 4.0*x)), _mm_load_ps(b.data(y, 4.0*x))));

在调试时,我发现由于这些函数存在一些内存对齐问题。有没有人能帮我解决这个问题,代码是用C++写的,我用的是Linux。

EN

回答 4

Stack Overflow用户

发布于 2010-12-17 07:20:41

我真的对这些SSE扩展一无所知,但听起来您在调整变量方面遇到了问题。要使用变量声明声明特定的对齐,需要不可移植的扩展,根据编译器的不同而不同。

对于GCC,你应该像这样声明你的变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Declare a variable called 'a' of type __m128, aligned at 16 bytes.
__m128 a __attribute__((aligned (16)));

对于Microsoft Visual C++,您可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
__declspec(align(16)) __m128 a;
票数 2
EN

Stack Overflow用户

发布于 2010-12-17 14:49:32

现在的一个快速解决方案是使用未对齐的加载和存储,即

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_mm_storeu_ps(&c(y, 4.0*x), _mm_sub_ps(_mm_loadu_ps(a.data(y, 4.0*x)), _mm_loadu_ps(b.data(y, 4.0*x))));

除非你使用的是Corei5/i7,否则性能会受到影响,但至少它会正常工作。

不过,最终您需要确保数据始终是16字节对齐的。

票数 1
EN

Stack Overflow用户

发布于 2010-12-17 07:05:42

_ps函数需要16字节对齐的内存操作数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4468420

复制
相关文章
Golang中的内存对齐
在计算机领域,对于某种特定的计算机设计而言,字(word)是用于表示其自然的数据单位的术语,是用来表示一次性处理事务的固定长度。一个字的位数,即字长。
Johns
2021/03/30
4.2K1
Golang中的内存对齐
浅谈内存管理中的分页和分段
内存管理的必要性 很早之前计算机只能运行单个进程,就算运行批处理程序,也是棑好对,一个一个的进行处理,不存在多个进程并发运行,这时候内核对于内存管理相对比较简单,直接把物理内存地址拿过来是使用即可。 随着计算机演进,支持多进程的OS,多个进程都都使用同一个物理地址空间,很容易多个进程之间相互干扰而引起进程的不可预期的行为。为了解决这个问题,CPU中的MMU(内存管理单元)引入了虚拟地址空间。以32位操作系统经为例,每个进程都可以拥有4G的寻址空间,当进程需要内存时候,通过转换技术和虚拟地址进行关联。MMU通
用户4700054
2022/08/17
1K0
浅谈内存管理中的分页和分段
内存对齐
内存对齐:#pragma pack(字节数) 如果用1,那么内存之间就没有空隙了
用户10731060
2023/09/02
2270
内存对齐
对于结构(或联合)的各个成员,第一个成员位于偏移为0,以后每个数据成员的偏移量必须是#pragma pack指定的数值和结构体(或联合)中最大数据成员长度 这2个数值中较小的一个的倍数。 使用伪代码表示: min(#pragma pack, 结构最大数据成员长度) * N
opencode
2022/12/26
1.2K0
内存对齐
内存对齐
被Go语言称为寄存器宽度的这个值,就可以理解为机器字长,也是平台对应的最大对齐边界,而数据类型的对齐边界是取类型大小与平台最大对齐边界中的较小的那个
Michel_Rolle
2023/07/30
2.5K0
实践真知:一则因内存导致的集群故障
故障概述 某天晚上,我方收到行方请求协助分析某数据库两节点RAC数据库问题,问题描述如下: 该 数据库版本为11.2.0.3,该版本中ASM内存管理机制有所变化,导致ASM实例对共享内存的需求加大,由于该数据库ASM实例共享内存设置过小,导致ASM实例间歇性出现ORA-4031共享池无法分配连续内存空间。为解决该问题,行方决定调整ASM实例内存参数,而在首先修改节点2 ASM内存参数并重启节点2 grid集群过程中,发现节点1 grid集群状态异常,并且在重启节点2集群后,查看节点1 grid集群状态依然报
数据和云
2018/03/06
1K0
实践真知:一则因内存导致的集群故障
介绍下C++中的内存对齐?
还是用一个例子带出这个问题,看下面的小程序,理论上,32位系统下,int占4byte,char占一个byte,那么将它们放到一个结构体中应该占4+1=5byte;但是实际上,通过运行程序得到的结果是8 byte,这就是内存对齐所导致的。
kdyonly
2023/03/03
7270
GO 内存对齐
之前遇到过这样一个情况(发现问题的结构体并不长这样, 不过为了引出问题, 改了一下):
烟草的香味
2020/11/25
1.3K0
GO 内存对齐
C++中类的内存对齐「建议收藏」
1.对于C++中的类的内存占用,存在一个很容易出现错误的点。就是:当一个类中并没有定义任何的成员变量也没有定义虚函数的时候,内存的占用情况,代码如下:
全栈程序员站长
2022/02/08
1.1K0
详解内存对齐
在了解内存对齐之前,先来明确几个关于操作系统的概念,更加方面我们对内存对齐的理解。
Golang梦工厂
2022/07/11
1.2K0
详解内存对齐
结构体成员在内存中的对齐方式
这个话题还是很早以前讨论过,当时并没有好好的理解,最近在复习知识的时候又重新看了一遍资料,自己做一下总结,也希望后面有人需要学习时可以对他有所帮助。以下我会举两个结构体的例子,分别画图的方式表达对齐的原则。
我与梦想有个约会
2023/10/21
2130
结构体成员在内存中的对齐方式
内存分段与分页机制
8086CPU以后总线寻址和CPU位数趋于一致,操作系统结构向下兼容,线性地址基址置0:
sofu456
2019/07/09
1.3K0
内存分段与分页机制
连续内存分派 分页 分段
关于连续内存分配 连续内存分配(contiguous memeory allocation) 固定分区分配 动态分区分配 纯分页(pure paging) 纯分段(pure segmentation) 分页与分段相比 分段只需为每段分配两个寄存器大小的空间,记录基址和段长,而分页需要为每页记录逻辑地址到物理地址的映射。 分段与动态分区分配相比 分段是指进程内部按一个个segment来分配。它的外碎片产生于段与段之间。 固定分区指一个进程的大小是动态分配、不固定的。它的外碎片产生于进程与进程之
平凡的学生族
2019/05/25
6180
结构体内存对齐
#include <stdio.h> #include <string.h> #include <malloc.h> /* So, when you are working with image headers, binary headers, and network packets, and are trying to access the TCP/ IP header, structure padding has to be avoided. */ int main(int argc, char* a
用户4645519
2020/09/07
6660
浅谈Golang内存对齐
如果你在 golang spec 里以「alignment」为关键字搜索的话,那么会发现与此相关的内容并不多,只是在结尾介绍 unsafe 包的时候提了一下,不过别忘了字儿越少事儿越大:
LA0WAN9
2021/12/14
1.4K0
浅谈Golang内存对齐
内存对齐(C++)
众所周知,C++的空类占用1个字节的内存空间,非空类占用的空间与类内的成员有关。 但类中成员所占内存并不是连续的,拿以下代码举例:
LonelyEnderman
2022/10/27
9920
内存对齐(C++)
Go内存对齐详解
在《小许code:Go内存管理和分配策略》这篇分享中我们了解到Go是怎么对内存进行管理和分配的,那么用户的程序进程在linux系统中的内存布局是什么样的呢?我们先了解一下基础知识,然后再看Go的内存对齐。
小许code
2023/04/14
2.1K0
Go内存对齐详解
内存对齐(Memory Alignment)
本文介绍了内存对齐的概念,包括内存对齐的原则和具体说明,并通过实例进行了详细解释。
用户1148523
2018/01/09
8630
再谈Golang内存对齐
关于 Golang 内存对齐,昨天已经写了一篇「浅谈Golang内存对齐」,可惜对一些细节问题的讨论语焉不详,于是便有了今天这篇「再谈Golang内存对齐」。
LA0WAN9
2021/12/14
6500
IOS 内存对齐原理
接下来我们首先定义两个结构体,分别计算他们的内存大小,来引入今天的主体,内存对齐原理
ruochen
2021/12/15
1.4K0

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文