小编Man*_*lva的帖子

c联系混乱

我是中级C程序员.我正在浏览C中的一个简单代码片段

int a ; // A
const int b; // B
static int c; //C
void func(int d) // D
{
   //.....
}
Run Code Online (Sandbox Code Playgroud)

变量a,b,c和d的联系是什么.我很确定a默认情况下有外部链接b,c并且d有内部链接.我的理解是否正确?

这是我在这个网站上的第一个问题.

c variables scope linkage

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

生成方法返回 EMF 不可修改列表

我正在通过带注释的 Java 代码使用 EMF,如下所示

/**
 * Adds the given type to this filter. Has no effect if the given type
 * already belongs to this filter.
 * 
 * @param type
 *            the type to add
 * @model
 */
public void addEntityType(String type);

/**
 * Returns the list of types belonging to this filter. Types are identified
 * by there name.
 * 
 * @return the list of types for this entity type filter
 * 
 * @model
 */
public List<String> getEntityTypes();

/** …
Run Code Online (Sandbox Code Playgroud)

java eclipse-emf

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

在sh脚本中,获取后台进程的pid

是否可以在以下bash脚本中知道iwevent进程的pid:

#!/bin/sh
( iwevent | logger -t IWEVENT ) &
echo the pid is: ???
Run Code Online (Sandbox Code Playgroud)

请注意,iwevent运行直到ctrl-c信号.

仅供参考.我在/ etc/network/interfaces"up"语句中运行此脚本,我想在相关的"down"语句中终止正在运行的iwevent进程.我的目标是记录无线事件.

linux bash

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

Bash如何重用找到的文件名?

我想在目录中运行一个脚本,以便为每个找到的点文件生成一个svg文件.就像是:

find . -name "*.dot" -exec dot -Tsvg \{} \;
Run Code Online (Sandbox Code Playgroud)

这工作正常但只是在stdout上输出结果.通常我使用重定向来生成svg文件.如何获取点文件名以在重定向中使用它

find . -name "*.dot" -exec dot -Tsvg > "$dotfilename".svg \{} \;
Run Code Online (Sandbox Code Playgroud)

bash

3
推荐指数
2
解决办法
690
查看次数

ld 在链接动态共享库时做什么?

将应用程序链接到动态共享库时,例如

gcc -o myprog myprog.o -lmylib
Run Code Online (Sandbox Code Playgroud)

我知道链接器(ld在我的 Linux 上)使用 -l 选项将库的名称(mylib在本例中)存储在生成的 myprog ELF 可执行文件中,该名称将在加载和链接时使用(都在程序启动时)如果我们忽略惰性动态链接)。我想知道ld关于动态共享库的其他工作是什么(我只是说在编译时完成的静态链接步骤)?

  • ld 必须检查提供的动态共享库中是否存在未定义的符号
  • 还有其他东西吗?

此外,我会对您使用的有关 ELF 格式以及动态链接和加载过程的指针(书籍、在线文档)感兴趣。

c linux linker ld

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

如何在使用 cmake 的 LLVM 构建中启用 --debug-only?

我正在使用 cmake 和 Ninja 构建生成器构建 LLVM,如下所示:

cmake path/to/llvm/ -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=1 -DLLVM_ENABLE_CXX1Y=1 -DLLVM_ENABLE_RTTI=1 -DLLVM_TARGETS_TO_BUILD="X86" -G Ninja
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用-debug-only=mytypeopt 选项打印有关我自己的通行证的一些调试信息:在我的通行证代码中使用以下内容:

define DEBUG_TYPE "mytype"
DEBUG(errs() << "My debug message\n");
Run Code Online (Sandbox Code Playgroud)

按如下方式运行 opt 不会生成任何输出消息:

opt < a.bc > /dev/null -mypass -debug-only=mytype
Run Code Online (Sandbox Code Playgroud)

根据LLVM 文档

出于性能原因,-debug-only 在 LLVM 的优化构建 (--enable-optimized) 中不可用。

我怀疑这是我问题的根源,但是在使用 cmake 构建 llvm 时,我找不到如何打开/关闭此选项。

c++ debugging llvm

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

如何旋转列表中的非连续元素

我有一个List包含根据其索引访问的元素.在这个列表中,我需要能够根据它们的索引"旋转"4个元素的组.例如在列表中

[a, b, c, d, e ,f , g, h, i, j, k, l]
Run Code Online (Sandbox Code Playgroud)

我想旋转c,f,i,l以获得

[a, b, l, d, e ,c , g, h, f, j, k, i]
Run Code Online (Sandbox Code Playgroud)

你将如何实现这个?

java

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

为什么Process.waitFor()永远不会返回?

我用以下方式从Java代码启动一个Windows进程(用C++编写但我没有源代码):

 Process p1 = Runtime.getRuntime().exec(cmdAndParams);
 p1.waitFor();
Run Code Online (Sandbox Code Playgroud)

我的问题是waitFor()方法永远不会结束.因此,我尝试在一个简单的shell中启动该过程,它正确地结束了shell中的许多打印(我想是标准输出).

因此,我决定创建并启动读取标准输出的线程,即使我现在不需要这些输出.这解决了这个问题.

所以我的问题是以下问题:这个解决方案是"启动和等待具有输出的外部进程的Java标准",还是意味着本机进程中存在某个问题?如果存在这样的问题,那么C++编程"错误"可能是问题的根源?

c++ java process

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

您如何理解 mlockall 手册页?

mlockall我的内核 3.0 上的手册页说

mlockall() 锁定映射到调用进程地址空间的所有页面。这包括代码页、数据页和堆栈 段,以及共享库、用户空间内核数据、共享内存和内存映射文件。当调用成功返回时,保证所有映射的页面都驻留在 RAM 中;这些页面保证保留在 RAM 中,直到以后解锁。

后来说

使用 mlockall() 来防止页面错误延迟的实时进程应该在进入时间关键部分之前保留足够的锁定堆栈页面,以便函数调用不会导致页面错误。这可以通过调用一个函数来实现,该函数分配一个足够大的自动变量(一个数组)并写入该数组占用的内存以访问这些堆栈页。这样,足够多的页面将被映射到堆栈,并且可以锁定到 RAM 中。虚拟写确保在临界区中甚至不会发生写时复制页面错误。

我知道此系统调用无法猜测将达到的最大堆栈大小,因此无法锁定堆栈页面。但是为什么上面显示的 man 的第一部分说它也是为堆栈完成的?此手册页中是否有错误,还是仅表示锁定已针对初始堆栈大小完成?

c linux

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

我应该使用哪个工具从字符串中提取数据?

作为一个非常新的Linux用户,我从来没有(真的)使用诸如sedawk/或其他任何工具来解析文本.我想从中提取

速度:1624.127424 Kib/s,9.410000秒

第二个时间值,就在seconds单词之前,

我应该考虑哪个工具?

linux bash awk sed

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

Java优化

我想知道是否存在任何性能差异

  1. String s = someObject.toString(); 的System.out.println(一个或多个);

  2. 的System.out.println(someObject.toString());

看看生成的字节码,它似乎有差异.JVM是否能够在运行时优化此字节码以使两种解决方案都提供相同的性能?

在这个简单的情况下,当然解决方案2似乎更合适,但有时我更倾向于解决方案1以实现可读性,我只想确保不在关键代码部分中引入性能"降低".

java optimization jit

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

如何划分GZIP文件中的块?

我正在为学习目的而编写一个解压缩GZIP文件的C程序.

根据GZIP 规范

gzip文件由一系列"成员"(压缩数据集)组成.每个成员的格式在以下部分中指定.成员只是在文件中一个接一个地出现,在它们之前,之间或之后没有其他信息.

一个成员由标题组成(可能带有可选字段,具体取决于某些标志值),一些压缩块(使用deflate算法),最后是CRC32和原始未压缩文件的大小.

我有两个问题:

  1. 我如何划分成员?实际上,一个gzip文件中真的有多个成员吗?似乎一个成员对应一个文件(例如文件名头)
  2. 如何界定预告片中的最后一个块(CRC + SIZE)?

c gzip

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

哈希码实现

关于这个问题(高效的hashCode()实现)我还有一个问题.

我有一个"值"类,实例持久存储在数据库中.因此,该类的实例都具有唯一的ID.

因此,我只需返回此id即可实现哈希码方法(以及相关的equals方法).

当使用Eclipse哈希码生成器并告诉Eclipse仅使用ID属性进行生成时,我有以下方法:

    @Override
    public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + id;
            return result;
    }
Run Code Online (Sandbox Code Playgroud)

我认为简单地返回id更有效率,因为我知道这个id是唯一的.我对吗 ?

提前致谢

java

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

标签 统计

java ×5

c ×4

linux ×4

bash ×3

c++ ×2

awk ×1

debugging ×1

eclipse-emf ×1

gzip ×1

jit ×1

ld ×1

linkage ×1

linker ×1

llvm ×1

optimization ×1

process ×1

scope ×1

sed ×1

variables ×1