小编Jer*_*wen的帖子

记忆中的d?

我正在寻找一种直接从内存加载生成的目标代码的方法.

我知道如果我将它写入文件,我可以调用dlopen动态加载其符号并链接它们.然而,考虑到它从内存开始,写入磁盘,然后由dlopen重新加载到内存中,这似乎有点迂回.我想知道是否有某种方法来动态链接存在于内存中的目标代码.据我所知,可能有几种不同的方法来做到这一点:

  1. 尽管它永远不会留下记忆,但我还是认为你的记忆位置是一个文件.

  2. 找一些其他的系统调用来完成我正在寻找的东西(我认为这不存在).

  3. 找到一些动态链接库,它可以直接在内存中链接代码.显然,这个有点难以谷歌,因为"动态链接库"会显示有关如何动态链接库的信息,而不是关于执行动态链接任务的库的信息.

  4. 从链接器中提取一些API并在其代码库中创建一个新库.(显然这对我来说是最不可取的选择).

那么这些可能是哪些?可行?你能指出我假设存在的任何事情吗?还有另一种我甚至没想过的方法吗?

c dynamic-linking ld dlopen

28
推荐指数
4
解决办法
8984
查看次数

在C中有效地提取double*的小数部分

我希望采用IEEE双精度并以最有效的方式删除它的任何整数部分.

我想要

1035 ->0
1045.23->0.23
253e-23=253e-23
Run Code Online (Sandbox Code Playgroud)

我不关心正确处理非正规,无穷大或NaN.我不介意有点麻烦,因为我知道我正在使用IEEE双打,所以它应该适用于各种机器.

无分支代码将是更优选的.

我的第一个念头是(伪代码)

char exp=d.exponent;
(set the last bit of the exponent to 1)
d<<=exp*(exp>0);
(& mask the last 52 bits of d)
(shift d left until the last bit of the exponent is zero, decrementing exp each time)
d.exponent=exp;
Run Code Online (Sandbox Code Playgroud)

但问题是我想不出一个有效的方法来向左移动指数的最后一位为零,如果没有设置所有最后一位,它似乎需要输出零.这似乎与基数2对数问题有关.

对此算法或任何更好的算法的帮助将非常感激.

我应该注意到我想要无分支代码的原因是因为我希望它能有效地进行矢量化.

c floating-point double bit-manipulation micro-optimization

20
推荐指数
4
解决办法
3万
查看次数

使用automake安装包含大量文件的数据目录树

我有一个数据目录,我想自动生成安装和卸载目标.基本上,我只想将这个目录逐字复制到DATA目录,通常,我可能会单独列出所有文件,如

dist_whatever_DATA=dir/subdir/filea ...
Run Code Online (Sandbox Code Playgroud)

但是当我的目录结构看起来像这样时会出现问题

*root
 *subdir
  *~10 files
 *subdir
  *~10 files
 *subdir
  *~700 files
 *subdir
 ...
 ~20 subdirs
Run Code Online (Sandbox Code Playgroud)

我只是不能列出作为Makefile.am的一部分包含的所有1000多个文件.那太荒谬了.

我还需要保留目录结构.我应该注意,这些数据根本不是由构建过程生成的,实际上是很短的录音.因此,我不希望automake"检查"我想要安装的每个文件是否已经实际创建,因为它们是否存在,并且无论文件是什么,我知道我希望它安装,等等文件不是,不应该安装.我知道这是其他地方不使用通配符instsalls的理由,但所有可能的原因都不适用于此.

automake autoconf install autotools

15
推荐指数
2
解决办法
5612
查看次数

如何为成员使用非默认构造函数?

我有两节课

class a {
    public:
        a(int i);
};

class b {
    public:
        b(); //Gives me an error here, because it tries to find constructor a::a()
        a aInstance;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到它以便aInstance用(int i)实例化而不是试图搜索默认构造函数?基本上,我想从b的构造函数中控制对构造函数的调用.

c++ constructor default class member

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

ftello/fseeko vs fgetpos/fsetpos

ftello/fseeko和fgetpos/fsetpos有什么区别?两者似乎都是文件指针获取/设置功能,使用不透明偏移类型有时允许64位偏移.

它们是在不同平台上还是由不同标准支持?它使用的偏移类型是否更灵活?

顺便说一句,我知道fgetpos/fsetpos和ftell/fseek,但这不是重复.这个问题询问FTELL/FSEEK,答案是适用于ftello/fseeko.

c file-io fseek fgetpos ftell

11
推荐指数
1
解决办法
2774
查看次数

使用autotools构建时如何生成源文件

有了Make,我会做类似的事情

generated.c: input.txt generator
    ./generator input.txt > generated.c
Run Code Online (Sandbox Code Playgroud)

我如何从autotools中获得相同的功能?(在清洁时删除generated.c也是一个奖励).

automake autoconf makefile autotools

10
推荐指数
1
解决办法
3774
查看次数

wxWidgets的类似终端的窗口?

我想在我的wxWidgets GUI中添加一个元素,其行为类似于终端模拟器.不是在执行命令的shell方面,而是在终端中运行的应用程序的输入输出设置方面.

基本上,要求是:

流输入/输出:当您输入一个字符时,它会被添加到输入流中,当某些内容通过管道输送到终端时,它会立即打印出来.

无编辑:输入一个字符后,它永久存在,因为它可能已被终端中运行的应用程序使用.

某种滚动(即使它只是显示几行或其他东西).

如果有一些东西已经做到这一点会很好,但是对于如何用已经存在的控件(如wxTextCtrl)实现它的建议也会受到欢迎.

c++ streaming wxwidgets terminal-emulator

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

C中的矢量化Trig功能?

我正在寻找计算高度并行化的trig函数(在1024的块中),并且我想利用至少一些现代架构所具有的并行性.

当我编译一个块

for(int i=0; i<SIZE; i++) {
   arr[i]=sin((float)i/1024);
}
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会不会对其进行矢量化,并表示

not vectorized: relevant stmt not supported: D.3068_39 = __builtin_sinf (D.3069_38);
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义.但是,我想知道是否有一个库可以进行并行三角计算.

只有一个简单的泰勒系列上升到第11阶,GCC将向所有循环进行矢量化,并且我的速度超过了一个天真的sin循环的速度的两倍(具有精确答案,或者具有9阶系列,只有一个位)关闭1600个值的最后两个,加速> 3倍).我确定有人之前遇到过这样的问题,但是当我谷歌时,我发现没有提及任何库等.

A.是否已存在某些内容?
B.如果没有,建议优化并行触发功能?

编辑:我发现所谓的"SLEEF"以下库:http://shibatch.sourceforge.net/ 其描述文件,并使用SIMD指令来计算几个基本功能.它使用SSE和AVX特定代码,但我认为将其转换为标准C循环并不困难.

c gcc trigonometry vectorization

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

Liquibase intellij整合?

根据liquibase网站,插件商店中有一个intellij IDEA插件,但我似乎无法找到它.插件是否已停止?liquibase集成有一些替代方案吗?

intellij-idea liquibase

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

我的X11代码出了什么问题?

我试图让X Window在屏幕上的某个位置.当我要求人们执行此功能时,他们说你只是递归调用XQueryTree.

这是我认为在某种程度上错误的代码片段.当我调试它时,它似乎工作得很好.唯一的问题是它给出的输出似乎有点奇怪.当我在根窗口上执行XQueryTree时,我得到了数百个孩子,当时我只有五个左右打开.此外,它似乎认为在某个地方有一个顶级窗口,根本没有一个,并返回它作为结果.无论我如何移动我的实际窗口,XQueryTree似乎都表明我的窗口顶部还有另一个窗口(不覆盖整个屏幕.)当我看到窗口所在的位置时,它处于某个任意点我的桌面.

如果这有任何帮助:显示来自XOpenDisplay(NULL),我最初传递它的根窗口是XDefaultRootWindow(显示).我在debian下使用metacity运行gnome.

point getwindowatloc(Display * display, Window root, jint x, jint y) {
        Window returnedroot;
        Window returnedparent;
        Window * children;
        unsigned int numchildren;
        XQueryTree(display,root,&returnedroot,&returnedparent,&children, &numchildren);
        XWindowAttributes w;
        int i;
        for(i=numchildren-1; i>=0; i--) {
            XGetWindowAttributes(display,children[i],&w);   
            if(x>=w.x && x<=w.x+w.width && y>=w.y && y <= w.y+w.height) {
                point result={w.x,w.y};
                XFree(children);
                return result;
            } else {
                point result=getwindowatloc(display,children[i],x-w.x,y-w.y);
                if(result.x!=INT_MAX) {
                    result.x+=w.x;
                    result.y+=w.y;
                    XFree(children);
                    return result;
                }
            }
        }
        if(children) {
            XFree(children);
        }
        return notfound;
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:对于正在搜索类似信息的人:我最终查看了xwininfo的来源.关键函数是dsimple.c中的Find_Client,它以某种方式忽略了窗口管理器以获取您实际需要的窗口.如果你想查看子窗口,这是我在dsimple.c中添加到Select_Window的一些代码,它将使用XTranslateCoordinates以递归的方式查看子窗口.

Window …
Run Code Online (Sandbox Code Playgroud)

c x11 xlib xorg

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