小编sud*_*03r的帖子

C++中dlsym()和dlopen()的替代品

我有一个应用程序,其中一部分使用共享库.这些库在编译时链接.
在运行时,加载器期望共享对象在LD_LIBRARY_PATH,如果没有找到整个应用程序崩溃,错误"无法加载共享库".注意,不能保证客户端将拥有库,在这种情况下我想要应用程序留下合适的错误消息,独立部分也应该正常工作.

为此,我使用dlsym()dlopen()在共享库中使用API​​.这个问题是如果我在API中有很多功能,我必须单独使用dlsym()和ptrs 访问它们,在我的情况下会导致内存损坏和代码崩溃.

这有什么替代方案吗?

c++ shared-libraries dynamic-loading dlsym

18
推荐指数
1
解决办法
1万
查看次数

为什么我必须在Perl裸字文件句柄前使用*?

在尝试这样做时:

 my $obj = new JavaScript::Minifier;
 $obj->minify(*STDIN, *STDOUT);
// modified above line to
 $obj->minify(*IP_HANDLE,*OP_HANDLE)
Run Code Online (Sandbox Code Playgroud)

如果IP_HANDLE和OP_HANDLE是文件句柄,上面的工作原理,但我仍然无法弄清楚*当应用于文件句柄或任何其他数据类型时实际上做了什么.

谢谢,

perl operators

9
推荐指数
2
解决办法
4829
查看次数

在哪里放置断言?

对意外情况的断言被认为是良好的防御性编码实践.每当我认为可能发生意想不到的事情时,我碰巧就会发出断言,但现在这似乎对我来说太过分了.

此外,有时温和的意外情况不一定会导致崩溃甚至可能导致客户端失败.

判断是否存在硬性规定?

谢谢.

c++ production-environment

9
推荐指数
3
解决办法
209
查看次数

如何开始修改大项目


我必须使用超过100k行代码对现有C++项目进行增强.
我的问题是如何以及从何处开始这些项目?
如果代码没有很好地记录,问题会进一步增加.是否有任何自动化工具可用于研究大型项目的代码流?

感谢名单,

c++ projects legacy-code

8
推荐指数
2
解决办法
501
查看次数

第n个格雷码

计算第n个格雷码的公式为:

(n-1) XOR (floor((n-1)/2))  
(Source: wikipedia)
Run Code Online (Sandbox Code Playgroud)

我把它编码为:

int gray(int n)
{
  n--;
  return n ^ (n >> 1);
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释上述公式是如何工作的,或者可能是它的推导?

algorithm gray-code

8
推荐指数
1
解决办法
7389
查看次数

在多线程应用程序中读取最快的文件

我必须将8192x8192矩阵读入内存.我想尽快做到这一点.
现在我有这个结构:

char inputFile[8192][8192*4]; // I know the numbers are at max 3 digits
int8_t matrix[8192][8192]; // Matrix to be populated

// Read entire file line by line using fgets
while (fgets (inputFile[lineNum++], MAXCOLS, fp));

//Populate the matrix in parallel, 
for (t = 0; t < NUM_THREADS; t++){
    pthread_create(&threads[t], NULL, ParallelRead, (void *)t);
}
Run Code Online (Sandbox Code Playgroud)

在函数中ParallelRead,我解析每一行,执行atoi并填充矩阵.并行性是线性的,就像线程t解析行一样t, t+ 1 * NUM_THREADS..

在具有2个线程的双核系统上,这需要

Loading big file (fgets) : 5.79126
Preprocessing data (Parallel Read) : 4.44083
Run Code Online (Sandbox Code Playgroud)

有没有办法进一步优化这个?

c++ multithreading file-read

8
推荐指数
2
解决办法
1万
查看次数

将静态成员对象与类一起使用有什么问题?

我听说使用静态成员对象不是一个很好的做法.

比方说,我有这个代码:

class Foo {
...
static MyString str;
};
Run Code Online (Sandbox Code Playgroud)

我在这个类的实现文件中定义并初始化这个变量:

MyString Foo::str = "Some String"; // This is fine as my string API handles this.
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我收到一条警告:

warning:'Foo::str' requires global construction.
Run Code Online (Sandbox Code Playgroud)

我班上有很多这样的成员,处理这个问题的最佳方法是什么.

谢谢,

c++ static

7
推荐指数
1
解决办法
523
查看次数

为什么要用一种语言将代码转换为另一种

我听说过一些编译器将代码转换为另一种高级语言,
例如Shedskin将python代码转换为优化的C++.
我想知道为什么会有人试图这样做.为什么不直接用所需的语言编写?

我能想到的唯一原因可能是C/C++等编译语言在性能方面优于解释语言.

欢迎任何更多的见解.

programming-languages code-translation

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

函数声明"sub function($$)"是什么意思?

我已经使用Perl一段时间了,但今天我遇到了这段代码:

sub function1($$)
{
   //snip
}
Run Code Online (Sandbox Code Playgroud)

这在Perl中意味着什么?

perl prototype subroutine

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

使用gcc预编译头的奇怪行为

我遇到麻烦让预编译的头文件工作,所以我提出了以下最小工作示例.

这是头文件 foo.h

#include <iostream>
using namespace std;

void hello() {
    cout << "Hello World" << endl;
}
Run Code Online (Sandbox Code Playgroud)

我编译它g++ -c foo.h给我一个编译头foo.gch.我希望当我编译包含的以下源文件时foo.h,它应该选择标题foo.h.gch,我很好.

// test.cpp
#include <cstdio>   // Swap ordering later
#include "foo.h"    // ------------------

int main() {
     hello();
}
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是,这不是使用编译foo.h.gch,而是使用 foo.h.要验证您可以将其编译为g++ -H test.cpp

但是,如果我更改包含的头文件的顺序如下:

// test.cpp
#include "foo.h"    // ------------------
#include <cstdio>   // Ordering swapped

int main() {
     hello();
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我编译使用g++ -H test.cpp,它编译foo.h.gch,哇!

所以我想知道这是否是GCC中的错误,还是我们应该使用这样的预编译头文件?在任何一种情况下,我认为知道它是有用的..

c++ gcc precompiled-headers

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