小编Joh*_*iss的帖子

在屏幕上绘制2D三维颜色三元组的最快方法是什么?

目标语言是C/C++,程序只能在Linux上运行,但平台无关的解决方案显然是首选.我可以使用Xorg,XVideo和OpenGL.

在配备英特尔显卡的英特尔酷睿2双核处理器上,我能在1024x768上获得多少FPS?(只有绘图计数,考虑在RAM中准备好阵列;不需要精确预测)

c linux opengl draw xorg

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

从其他库重新导出共享库符号(OS X/POSIX)

我的问题是x86-64特定的OS X相当,但是对其他POSIX操作系统起作用的通用解决方案更受欢迎.

给出一些共享库的符号名称列表(以下称为原始库),我希望我的共享库重新导出这些符号.重新导出,如果有人试图解决我的库的符号我要么提供我的这个符号的版本或(如果我的库没有这个符号)转发到原始库的符号.

我不知道类型的符号,我只知道他们是否是函数(类型Tnm输出)或其他符号(类型Snm输出).

对于函数,我已经有一个解决方案:对于每一个功能我想重新出口我生成汇编存根,它动态地解析符号(使用dlsym()),然后一跃而起,解决函数非常相同的环境(寄存器rdi,rsi,rdx,rcx,r8,r9堆栈指针,...).我基本上生成通用代理功能.使用一些非常容易生成的宏技巧,无需为每个符号编写代码.

对于非功能符号,问题似乎更难,因为我无法生成此通用代理函数,因为解析方从不调用函数.

使用构造函数static void init(void) __attribute__((constructor));我可以在有人加载我的库时执行代码,如果可能的话,这将是解决和重新导出所有非函数符号的好点.

换句话说,我想写我的库的符号表以指向另一个共享库的相应符号.在编译或运行时进行重写是可以的(首选运行时).换句话说,DYLD_INSERT_LIBRARIES(LD_PRELOAD)的行为正是我需要的,但我不想插入新的库,我想替换一个(在文件系统中).编辑:我不希望/不能使用DYLD_INSERT_LIBRARIES或该DYLD_*系列的任何其他环境变量的原因是它们被代码签名,限制,...二进制文件忽略.

我知道的-reexport-l,-reexport_library-reexported_symbols_list连接器选项,但我不能让他们的工作,特别是当我的图书馆是一个"替代"的框架,是伞框架的一部分(例如:/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/SearchKit),因为ld者禁用打击保护伞的框架部分直接链接.

编辑:因为我有点含糊地解释:我无法改变实际程序的链接方式.目标是生成一个共享库,它是原始库的替代品.(显然称为过滤库.)

c macos linker x86-64 shared-libraries

9
推荐指数
1
解决办法
2746
查看次数

Haskell的有限域线性代数库

我正在为Haskell寻找有限域线性代数库.

像Haskell的FFLAS-FFPACK之类的东西会很棒:-).

当然,我检查了hmatrix,似乎对任意矩阵元素类型有一些支持,但我找不到任何与hmatrix一起使用的有限域库.当然,我很欣赏一个高性能的解决方案:-)

特别地,我希望能够将p n×1p 1×m矩阵(向量)乘以p n×m矩阵.

haskell types algebra linear-algebra finite-field

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

在OS X上以编程方式查找共享库中的本地符号偏移量

我需要在OS X上的共享库中找到本地符号的偏移量.本地符号与非导出符号中的一样.因此dyld("symbol_name")不会起作用.

但是,我可以用它nm来找到这些偏移量

$ nm /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/DesktopServicesPriv  | grep -e ChildSetLabel -e NodeVolumeEject
000000000006cccd T _NodeVolumeEject
000000000009dbd7 t __ChildSetLabel
Run Code Online (Sandbox Code Playgroud)

在那里我们看到导出的(T)符号NodeVolumeEject,0x6cccd我可以轻松地使用它来显示偏移量dyld("NodeVolumeEject").dyld()将显示当前地址空间中的地址,但我对共享库中的偏移量或地址空间中的绝对地址感到满意.另外,还有local(t)符号_ChildSetLabel,它是offset(0x9dbd7)我无法透露使用dyld().

我希望能够以编程方式做到这一点的分辨率(不gobjdump,nm,otool,或任何其他外部程序).是否有"简单"的方法来实现这一目标?上面提到的工具的源代码包含所需的代码,但我想知道是否有更直接的东西.

域:解决方案只适用于OS X 10.8或更高版本的x86_64 MachO二进制文件.

澄清:我很乐意弄清楚当前偏移的绝对偏移(由ASLR引起)显然不是静态的.但我也很高兴找出相对于该库开头的偏移量,该库保持静态(直到重新编译).从"库中的地址"到"地址空间中的地址"的部分非常简单:

off_t sym_offset_child_set_label = ANSWER_TO_THIS_QUESTION("_ChildSetLabel");
Dl_info info;
void *abs_volume_eject = dlsym(RTLD_DEFAULT, "NodeVolumeEject");
void *abs_child_set_label = NULL;
if (dladdr(abs_volume_eject, &info)) {
    abs_child_set_label = (void *)((char *)info.dli_fbase + sym_offset_child_set_label);

    /* …
Run Code Online (Sandbox Code Playgroud)

macos mach-o shared-libraries dyld

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

C(非C++)的有限域(伽罗瓦域)线性代数库

我正在为C 搜索有限域/ galois域精确线性代数库(C++是不可接受的,因为我需要能够编写一个Haskell绑定到它,这对C++来说显然很难).

我找到了类似FFLAS-FFPACKGivaro的库,但这些是C++ - 模板库:-(

特别地,我希望能够将p n×1p 1×m矩阵(向量)乘以p n×m矩阵.

那么,有没有人知道C或"extern C"库是否合适?

PS:这是关于同一事项的我的Haskell问题.

c linear-algebra ffi finite-field

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

在OS X上枚举所有已安装的应用程序

基本问题

我正在寻找一个解决方案来枚举安装在(Mac)OS X系统上的所有应用程序,即使用LaunchServices注册的所有应用程序包.

简单的方法不起作用

(请注意:lsregister可以在下面找到/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister).

目前我正在使用输出lsregister -dump | grep -E '^.*[ \\t]*path:[ \\t]+(\/.*)$' | grep -Eo '\/.*',其中有一些问题:

  • .app带有换行符的捆绑包(\n在UNIX上有效)无法正确处理(通过编写正确的解析器可以解决此问题)
  • lsregister没有正确处理奇怪的文件名(例如包含RTL标记).lsregister似乎忽略了名称中带有RTL标记的文件.如果需要,可以通过运行以下命令在名称中创建一个RTL文件.

    python -c 'import shutil; shutil.copytree(u"/Applications/TextEdit.app", u"/Applications/ThisIsAWeird\u202EApp.app")'
    
    Run Code Online (Sandbox Code Playgroud)

    这样做了以后,lsregister -dump | grep ThisIsAWeird不会透露它.但是,当您右键单击文本文件并转到"打开方式"时,您将启动LaunchServices和Finder仍然支持该文件. 看你自己

简单地枚举所有文件/Applications和其他目录都不起作用,因为LaunchServices知道任意文件夹中的应用程序包,我也需要这些应用程序.

其他我没有开始工作的approch

显然,有一个私有的API函数_LSFindApplications,它正是我需要做的,但我不能让它工作,并没有在互联网上找到任何非官方的文档.(证明它存在:nm /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/LaunchServices | grep __LSFindApplications$)

更新:system_profiler方法似乎也不起作用

直到现在我虽然system_profiler@Anoop建议的方法有效,但今天我发现lsregister仍然可以获得更多的二进制文件.在所有机器上都有一些或丢失,有些似乎只是在system_profiler你用另一个OS X安装外部卷时丢失了.这是一个列表system_profiler,在lsregister我的一台机器的输出中缺少(但存在):

/Applications/Automator.app/Contents/Resources/Application Stub.app
/Applications/Google Chrome.app/Contents/Versions/30.0.1599.69/Google …
Run Code Online (Sandbox Code Playgroud)

macos launch-services osx-mountain-lion

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

Haskell:Data.HashSet(来自无序容器)大型集的性能

数据

首先,让我们生成一些输入,以便我们有具体的数据来讨论:

python -c 'for f in xrange(4000000):  print f' > input.txt
Run Code Online (Sandbox Code Playgroud)

这将生成一个input.txt包含0到3999999之间的数字的文件,每个文件都在自己的行上.这意味着我们应该有一个包含4,000,000行的文件,最多可添加30,888,890字节,大约29 MiB.

一切都作为清单

是的,让我们将所有内容加载到内存中[Text]:

import Data.Conduit
import Data.Text (Text)
import Control.Monad.Trans.Resource (runResourceT)
import qualified Data.Conduit.Binary as CB
import qualified Data.Conduit.Text as CT
import qualified Data.Conduit.List as CL

main :: IO ()
main = do
hs <- (runResourceT
          $ CB.sourceFile "input.txt"
         $$ CT.decode CT.utf8
         =$ CT.lines
         =$ CL.fold (\b a -> a `seq` b `seq` a:b) [])
print $ head hs
Run Code Online (Sandbox Code Playgroud)

并运行它:

[1 of 1] …
Run Code Online (Sandbox Code Playgroud)

performance haskell memory-management hashset unordered-containers

7
推荐指数
0
解决办法
360
查看次数

有没有办法告诉JVM当前使用哪种GC算法

我正在使用Java 5,我们的自定义服务器应用程序需要GC调整,因为有时我们在高峰时段会遇到15-20秒的暂停.我们在具有JVM args的服务器类机器上运行Java 5-server -d64

有没有办法告诉JVM当前使用哪种GC算法?

http://docs.oracle.com/javase/1.5.0/docs/guide/vm/gc-ergonomics.html

在运行服务器VM的服务器级计算机上,垃圾收集器(GC)已从先前的串行收集器(-XX:+UseSerialGC)更改为并行收集器(-XX:+UseParallelGC).您可以使用-XX:+UseSerialGCjava命令的命令行选项覆盖此缺省值.

1)我想知道真的发生了吗?

我的下一个问题是我在命令行参数中添加了以下内容

-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -Xloggc:logs/gc.log

2)除了记录GC日志外,它们是否会对正在运行的JVM产生任何性能或行为影响?

java garbage-collection jvm-arguments

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

来自文件行的回声

我有一个文件"myfile.txt",其中包含下一个内容:

hola mundo
hello word
Run Code Online (Sandbox Code Playgroud)

我想要与每一行合作

for i in `cat myfile.txt`; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

我希望这能给我

hola mundo
hello word
Run Code Online (Sandbox Code Playgroud)

先是一条线,然后另一条线,但是得到

hola
mundo
hello
word
Run Code Online (Sandbox Code Playgroud)

因为我可以要求结果直到换行而不是每个空格?

所有

bash echo cat

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

打开文件后,访问时间不会更改

我使用stat来获取文件的访问时间(当前日期是2013年10月23日)

[juan@JN-LNXSVR-02 labfiles]$ stat nursery
  File: `nursery'
  Size: 837         Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 139539      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/    juan)   Gid: (  500/    juan)
Access: 2013-10-22 18:03:20.703888346 -0400
Modify: 2013-10-21 16:57:07.801165793 -0400
Run Code Online (Sandbox Code Playgroud)

然后我编辑文件并关闭它而不做任何修改,然后再次提交stat

juan@JN-LNXSVR-02 labfiles]$ vi nursery
[juan@JN-LNXSVR-02 labfiles]$ stat nursery
  File: `nursery'
  Size: 837         Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 139539      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/    juan)   Gid: (  500/    juan)
Access: 2013-10-22 18:03:20.703888346 -0400 …
Run Code Online (Sandbox Code Playgroud)

linux filesystems mount

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