小编Tay*_*r R的帖子

编译器优化创建系统调用?

我正在以两种模式编译一个相当复杂的应用程序:调试和发布。在我看来,主要区别是 -O0 与 -O3 (如果需要,我可以提供 makefile 的相关部分)。我试图尽可能避免系统调用生成,因为我正在系统调用模拟模式下模拟此应用程序(下面没有运行操作系统)。我当前遇到的问题是,在发布模式下,编译器会生成一个额外的套接字系统调用,我不希望发生这种情况(并且在调试模式下也不会发生)。

我认为可能创建套接字的原因是我正在使用 pthreads 并且我的两个线程正在通过 易失性 char* 进行通信。所以我猜测当我设置 -O3 标志时编译器可能试图以一种奇特的方式实现它?但我不确定这是否是一个合理的假设。

  1. 是否有可能由于 -O3 标志而生成套接字系统调用?(没有太大意义)
  2. 如果是这样,我如何提示编译器避免生成此系统调用?

编辑:顺便说一句,代码是用 C 和 C++ 编写的

编辑:代码静态链接到以下共享库:

libstdc++.a 
libm.a 
libglib-2.0.a 
-static-libgcc 
*special pthreads library*
Run Code Online (Sandbox Code Playgroud)

另外,我发现二进制文件中发生对套接字的调用的位置:

8c716:       db28            blt.n   8c76a <openlog_internal+0xf2>
8c718:       f8d9 1008       ldr.w   r1, [r9, #8]
8c71c:       4620            mov     r0, r4
8c71e:       2200            movs    r2, #0
8c720:       f441 2100       orr.w   r1, r1, #524288 ; 0x80000
8c724:       f001 e97c       blx     8da20 <__socket>
8c728:       4b20            ldr     r3, [pc, #128]  ; (8c7ac <openlog_internal+0x134>)
8c72a: …
Run Code Online (Sandbox Code Playgroud)

c c++ sockets compiler-construction cross-compiling

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

分割大文件的最佳方法

我试图拆分一个巨大的文本文件(约5亿行文本),这是非常规则的,看起来像这样:

-- Start ---

blah blah

-- End --

-- Start --

blah blah

-- End --

...
Run Code Online (Sandbox Code Playgroud)

其中......暗示重复模式,"blah blah"具有可变长度~2000行.我想分开第一个

-- Start --

blah blah

-- End --
Run Code Online (Sandbox Code Playgroud)

阻塞到一个单独的文件并从FASTEST中的原始文件中删除它(运行时,给定我将运行这么多次)可能的方式.

理想的解决方案是从原始文件中删除初始块并将其粘贴到新文件中,而不加载巨大的初始文件的尾部.

我用以下方式尝试了csplit:

csplit file.txt /End/+1 
Run Code Online (Sandbox Code Playgroud)

这是一种有效的方法,但在时间上效率不高.

编辑:如果我们从文件中删除最后一个"开始结束"块而不是第一个块,是否有解决方案?

regex unix perl file csplit

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

标签 统计

c ×1

c++ ×1

compiler-construction ×1

cross-compiling ×1

csplit ×1

file ×1

perl ×1

regex ×1

sockets ×1

unix ×1