小编too*_*ite的帖子

为什么编译器在执行64位操作时将movq更改为movd?

我正在编程以下内容:

__asm__ volatile ("movq %%rax, %%mm1\n"
                  "movq %%rcx, %%mm2\n"
                  : : "a" (0xDEADBEEFDEADBEEF), "c" (0xBADFACE5BADFACE5));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我将值从rax移动到mm1,它们都是64b寄存器(将qword值从一个寄存器移动到另一个寄存器).但是当我编译我的代码时,我看到:

mov  rax, 0xDEADBEEFDEADBEEF
mov  rcx, 0xBADFACE5BADFACE5
movd mm1, rax     <-------------- Why it is doing a dword operation ??
movd mm2, rcx     <-------------- Why it is doing a dword operation ?? 
Run Code Online (Sandbox Code Playgroud)

我正在以64位模式编译我的代码,我不确定为什么它将64位操作改为32位.

assembly mmx

6
推荐指数
1
解决办法
1080
查看次数

C/C++ NaN还是布尔值?

我必须保持一个双倍值缓存.使用后,它应该无效.两种选择

一种是添加布尔标志,true当缓存值良好时,使用时将其设置为false,当flag为false时,重新计算并重新填充.

第二个更有趣 - 我可以将它保持为double值并使用NaN作为无效/需要重新计算标志.

double get() const {
    if (!isnan(_value)) {
        double t = _value;
        _value = std::numeric_limits<double>::quiet_NaN;
        return t;
    }
}
Run Code Online (Sandbox Code Playgroud)

对此有何异议?关于效率的任何想法?

c++ fpu

6
推荐指数
1
解决办法
423
查看次数

使用dlopen加载GNU ld脚本

我有一个C++ 14代码,应该加载任意共享对象文件dlopen.不幸的是在一些系统上(例如我的archlinux,据说也适用于ubuntu和gentoo上的一些.so),这些so文件可以是"GNU ld脚本"而不是实际的二进制文件.

供参考,以下是我的内容/usr/lib/libm.so:

/* GNU ld script
*/
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /usr/lib/libm.so.6  AS_NEEDED ( /usr/lib/libmvec.so.1 ) )
Run Code Online (Sandbox Code Playgroud)

我在ghcruby中找到了几个处理这个问题的代码片段.我想避免根据解析dlerror文本和文件来手动解析文本文件.我觉得这是非常邪恶的,我将无法实现和维护这种格式的角落案例.

有没有一种干净的方法来处理这种情况?坦率地说,我很困惑为什么dlopen实际上并没有真正处理这些问题.

注意:考虑到上述补丁,我认为这不仅仅是我的系统配置/版本的问题.如果这应该是开箱即用的dlopen(错误而不是缺少功能),请告诉我.

c++ gnu ld

6
推荐指数
1
解决办法
312
查看次数

python上的子进程调用给出错误"错误的文件描述符"

每当我使用下面的方法从Python调用ac代码可执行文件时,我得到一个"错误的文件描述符"错误.当我从命令提示符运行代码时它工作正常.请帮忙!?

import subprocess

p = subprocess.call(['C:\Working\Python\celp.exe', '-o', 'ofile'], stdin=subprocess.PIPE, stderr=subprocess.STDOUT)

In [84]: %run "C:\Working\Python\test.py"
Error: : Bad file descriptor
Run Code Online (Sandbox Code Playgroud)

python subprocess file-descriptor

6
推荐指数
2
解决办法
3496
查看次数

在C中使用regexec/strtok_r时出现分段错误

我在弄清楚我收到分段错误的位置和原因时遇到了问题.

我正在编写一个C代码,提示用户输入正则表达式并编译它,然后输入一个包含多个句子的字符串:

int main(void){

  char RegExp[50];
  regex_t CompiledRegExp;
  char *para;
  char delim[] = ".!?,";
  char *sentence;
  char *ptr1;

  printf("Enter regular expression: ");
  fgets(RegExp, 50, stdin);

if (regcomp(&CompiledRegExp,RegExp,REG_EXTENDED|REG_NOSUB) != 0) {                        

    printf("ERROR: Something wrong in the regular expression\n");                         

    exit(EXIT_FAILURE);                                                                   

  }

  printf("\nEnter string: ");
Run Code Online (Sandbox Code Playgroud)

strtok_r用于将字符串拆分为以下任一分隔符.,?!然后生成的标记(句子)用作regexec函数中的字符串参数,该函数搜索它以查看先前编译的正则表达式是否包含在标记中:

if( fgets(para, 1000, stdin)){

    char *ptr = para;
    sentence = strtok_r(ptr, delim, &ptr1);

    while(sentence != NULL){

      printf("\n%s", sentence);

      if (regexec(&CompiledRegExp,sentence,(size_t)0,NULL,0) == 0) {
        printf("\nYes");
      } else {
        printf("\nNo");
      }
      ptr = ptr1;
      sentence = strtok_r(ptr, delim, &ptr1); …
Run Code Online (Sandbox Code Playgroud)

c regex strtok segmentation-fault

6
推荐指数
1
解决办法
576
查看次数

Springboot嵌入式tomcat绑定到IPV6

我正在使用springboot工作休息api,当我尝试部署它自动绑定到我们不想要的ipv6的jar时我面临小问题,我知道我可以使用外部tomcat.但只是为了学习我想知道是否有可能强制它绑定到ipv4而不是?

谢谢Sajid

tomcat spring-boot

6
推荐指数
1
解决办法
3851
查看次数

Doxygen:输出版本号

我想让 Doxygen 显示源代码版本号作为主页或标题标题的一部分。

目前,我们的代码将版本定义为文本文字:

/*!
 *  \brief  Text literal containing the build number portion of the
 *              ESG Application Version.
 */
static const char   build_version_text[] = "105";
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索了一种方法,可以将上述语句中的 105 放入 Doxygen 主页(或标题),但没有运气。

背景
我们有一个构建服务器,它更新文本字符串作为每晚构建操作的一部分。文件被更新,然后签入软件配置管理系统。构建服务器还能够生成文档。我们还希望开发人员能够检查代码,在他们的工作站上构建 Doxygen 文档。

我们使用的是 Doxygen 版本 1.8.11。

versioning doxygen

6
推荐指数
1
解决办法
4105
查看次数

直接访问类属性是否比通过 getter 函数获取值更快?

我在python中嵌入了代码。我需要访问一个对象的属性。

是不是做得objectA.attribute_xobjectA.get_attribute_x()

从面向对象的角度来看,使用 getter 似乎是正确的做法。但是哪种方式在计算上更便宜/更快?

python python-3.x

6
推荐指数
1
解决办法
623
查看次数

如何禁用配置脚本中的依赖关系跟踪

我正在尝试使用不同的构建系统构建库,但库中的config.h文件需要在运行autoconf生成的配置脚本后生成的头文件.

这是我尝试生成所需config.h文件的一系列步骤

autoreconf -ivf 
./configure --disable-dependency-tracking
Run Code Online (Sandbox Code Playgroud)

构建系统保证gflags链接库,并且标头将在预处理时可用.但configure脚本退出时出现以下错误

configure: error: Please install google-gflags library
Run Code Online (Sandbox Code Playgroud)

有什么方法可以获得所需库的列表(例如gflags),然后将参数传递给configure脚本,告诉它假设该库存在于系统中?我经历了两者的帮助输出,autoreconf并且./configure无法解决这个问题.

很抱歉有很长的解释和问题.我很新autoconf,等等.

automake autoconf configure

6
推荐指数
1
解决办法
580
查看次数

C - 从C++模拟'mutable'

我有这样的C结构:

struct my_struct {
   int i;
   double d;
   struct expensive_type * t;
};
Run Code Online (Sandbox Code Playgroud)

创建此结构的实例并将其初始化为:

struct my_struct * my_new( int i , double d) 
{
    struct my_struct * s = malloc( sizeof * s);
    s->i = i;
    s->d = d;
    s->t = NULL;
    return s;
}   
Run Code Online (Sandbox Code Playgroud)

计算struct expensive_type * t成员是非常昂贵的,可能不需要 - 它只是初始化为NULL- 然后根据需要计算:

const struct expensive_type * my_get_expensive( const struct my_struct * s) 
{
    if (!s->t)
       s->t = my_expensive_alloc( s->i , s->d );
    return s->t;  
 }
Run Code Online (Sandbox Code Playgroud)

在C++中,我会用 …

c const mutable

6
推荐指数
1
解决办法
112
查看次数