c – 使用带有自定义对齐分配器实现的最新g编译SSE和-O3选项时的非法指令(核心转储)

c – 使用带有自定义对齐分配器实现的最新g编译SSE和-O3选项时的非法指令(核心转储),第1张

概述当使用g(GCC)4.8.3 20140911(Red Hat 4.8.3-7)使用编译命令“g -g -fno-omit-frame-pointer -msse2 -mssse3 -O3 Memory”编译以下代码时. cpp“,可执行文件在执行时引发”非法指令(核心转储)“. 它使用较旧的g版本使用相同的编译器标志编译并运行没有问题.当编译器标志“-mssse3 -O3”被删除或被更低的优化级 当使用g(GCC)4.8.3 20140911(Red Hat 4.8.3-7)使用编译命令“g -g -fno-omit-frame-pointer -msse2 -mssse3 -O3 Memory”编译以下代码时. cpp“,可执行文件在执行时引发”非法指令(核心转储)“.

它使用较旧的g版本使用相同的编译器标志编译并运行没有问题.当编译器标志“-mssse3 -O3”被删除或被更低的优化级别(例如“-O2”)替换时,它也会编译并运行没有问题.

如果同时使用旧的和新的g编译器,使编译器标记为“-msse2 -mssse3 -O3”并且具有可移植的对齐内存分配器是必需的,那么存在哪些选项?在下面的代码中是否有一个简单的错误可以轻松修复?最后,为什么存在这个错误?

使用gdb时,触发此错误的行是:“memory [i] =(unsigned char)i;”.

非常感谢提前.

#include <iostream>using std::cerr;using std::cout;using std::endl;using std::flush;#include <stdlib.h>voID *aligned_alloc(int alignment,int size){  const int pointer_size = sizeof(unsigned char *);  const int requested_size = size + alignment - 1 + pointer_size;  unsigned char *base = (unsigned char *)malloc(requested_size);  if (base == NulL)  return NulL;  unsigned char *start = base + pointer_size;  const int trim_offset = (int)(((unsigned long long)(start+alignment-1)) & (alignment-1));  unsigned char *aligned = start + alignment - 1 - trim_offset;  *(unsigned char **)(aligned-pointer_size) = base;  return aligned;}voID aligned_free(voID **aligned){  if (*aligned == NulL)  return;  unsigned char *base = *(unsigned char **)((unsigned char *)(*aligned) - sizeof(unsigned char *));  free(base);  *aligned = NulL;}int main(){  unsigned char *memory = (unsigned char *)aligned_alloc(16,120);  if (memory == NulL){    cout<<"ERROR: Unable to allocate memory."<<endl;    exit(1);  }  for (int i=0; i<120; i++){    memory[i] = (unsigned char)i;  }  aligned_free((voID **)&memory);  return 0;}
解决方法 这是由于cpu不支持SSSE3(补充流式SIMD扩展3)指令子集(特别是某种风格的3GHZ P4),试图运行为支持该指令子集的cpu编译的代码;简单地从GCC命令行中删除-mssse3标志应该足以导致违规指令消失. 总结

以上是内存溢出为你收集整理的c – 使用带有自定义对齐分配器实现的最新g编译SSE和-O3选项时的非法指令(核心转储)全部内容,希望文章能够帮你解决c – 使用带有自定义对齐分配器实现的最新g编译SSE和-O3选项时的非法指令(核心转储)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1227431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存