小编sep*_*p2k的帖子

C++堆栈和范围

我在Visual C++ 2008上尝试了这个代码,它显示A和B没有相同的地址.

int main()
{
    {
        int A;
        printf("%p\n", &A);
    }

    int B;
    printf("%p\n", &B);
}
Run Code Online (Sandbox Code Playgroud)

但是当B被定义时A不再存在,在我看来,相同的堆栈位置可以重用...

我不明白为什么编译器看起来不像一个非常简单的优化(例如在较大的变量和递归函数的上下文中可能很重要).并且似乎重用它不会在CPU和内存上更重.有没有人对此有解释?

我想答案是"因为它比它看起来要复杂得多",但老实说我不知道​​.

编辑:关于以下答案和评论的一些准确性.

这段代码的问题在于,每次调用此函数时,堆栈都会"增加一个整数".当然,这在示例中没有问题,但考虑大变量和递归调用,并且您可以轻松避免堆栈溢出.

我建议的是内存优化,但我不知道它会如何损害性能.

顺便说一句,这种情况发生在发布版本中,将进行所有优化.

c++ optimization stack

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

描述这种组合的术语是什么?

有4个项目:1,2,3和4.如果我们只允许以下组合,我们应该怎么称呼它们?我忘了.它被称为nCr吗?

1 2 3 4
1 2 3
1 2 4
2 3 4
1 2
1 3
1 4
2 3
2 4
3 4
1
2
3
4

theory algorithm probability

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

Haskell主要测试

我是Haskell的新手,我正在尝试一下:

isPrime :: Integer->Bool
isPrime x = ([] == [y | y<-[2..floor (sqrt x)], mod x y == 0])
Run Code Online (Sandbox Code Playgroud)

我有几个问题.

  1. 为什么当我尝试加载.hs时,WinHugs说:(Floating Integer, RealFrac Integer)定义所需的实例isPrime
  2. 当解释器在右侧集合中找到一个元素时,它会立即停止或计算所有集合?我想你知道我的意思.

抱歉我的英语.

primes haskell short-circuiting

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

哪里可以找到clang -OX的优化顺序?

在哪里可以找到clang根据-OX使用的优化顺序?

llvm clang

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

什么是Rust中的矢量切片?

根据rust doc,字符串切片是:

这个字符串是静态分配的,这意味着它保存在我们编译的程序中,并且在它运行的整个持续时间内都存在.

矢量切片怎么样?这些字节码是硬编码的值吗?

Rust doc没有正确解释什么是矢量切片:

与&str类似,切片是对另一个数组的引用.我们可以使用as_slice()方法从向量中获取切片:

let vec = vec![1i, 2i, 3i];
let slice = vec.as_slice();
Run Code Online (Sandbox Code Playgroud)

rust

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

为什么引用匿名内部类的名称在它是成员时起作用,而不是变量?

对不起标题血,我不知道如何在一行中描述问题.如果你有建议,我会公开的.

假设您有以下课程:

public class SomeClass {
    // doesn't even need to be final, which is freaky
    Runnable memberRunnable = new Runnable() {
        public void run() {
            SomeOtherClass.someMethod(memberRunnable); // this works
        }
    }
    public void someMethod() {
        final Runnable varRunnable = new Runnable() {
            public void run() {
                SomeOtherClass.someMethod(varRunnable); // compiler error - "varRunnable" might not have been initialized
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么memberRunnable能够从内部访问自己run(),而varRunnable不是?AFAICS它是完全相同的结构.

this知道,你可以使用它.我只是想知道为什么编译器会在两种情况之间产生差异,这两种情况看起来完全相同.也就是为什么它认为varRunnable可能没有被初始化,当它显然是在那时.

有人可能会说,如果Runnable是一个类(它是一个接口),它的构造函数可能正在尝试调用run(),从而实际上遇到了一个未初始化引用的场景.但是,这也应该是这种情况memberRunnable …

java

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

arm-none-eabi和arm-linux-gnueabi之间的区别?

arm-none-eabi和arm-linux-gnueabi有什么区别?我知道如何使用它们(一个用于裸机软件,另一个用于打算在Linux上运行的软件)的区别。但是技术背景是什么?

据我所知,我看到了ABI的区别,它类似于API,但在二进制级别。它确保了不同应用程序的互操作性。

但是我真的不了解拥有或没有操作系统会以哪种方式影响我的工具链。我唯一想到的是,在编译裸机软件时,可能必须将库静态链接(对吗?),因为没有操作系统可以动态地提供它们。

我发现与此主题相关的最多页面只是回答了如何使用工具链,但没有回答技术背景。我是机电一体化和嵌入式系统的新学生,所以我在该领域的经验有限。

linux embedded abi toolchain

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

如何使用 Java 编译器重放文件来调试 JVM 问题

我有一个 Java 服务器进程,现在间歇性崩溃,并显示以下崩溃报告:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f8c169f6df8, pid=33597, tid=140237357057792
#
# JRE version: Java(TM) SE Runtime Environment (8.0_40-b25) (build 1.8.0_40-b25)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.40-b25 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x404df8]  PhaseChaitin::gather_lrg_masks(bool)+0x208
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again …
Run Code Online (Sandbox Code Playgroud)

java jit segmentation-fault

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

如何在 IntelliJ IDEA 中使用 C++?

问题在标题中。

到目前为止,我只将 IntelliJ 用于 Java。我是否需要下载某种编译器或如何创建 C++ 文件?

c++ intellij-idea c++11 intellij-14

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

CMake + ccache:RULE_LAUNCH_COMPILE 或 CMAKE_&lt;LANG&gt;_COMPILER_LAUNCHER

当将 ccache 与 CMake 一起使用时,似乎有两种方法来设置项目。

第一个是与RULE_LAUNCH_COMPILE

find_program(CCACHE "ccache")
if(CCACHE)
    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE}")
endif()
Run Code Online (Sandbox Code Playgroud)

第二个是CMAKE_<LANG>_COMPILER_LAUNCHER

find_program(CCACHE "ccache")
if(CCACHE)
    set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE})
    set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE})
endif(CCACHE)
Run Code Online (Sandbox Code Playgroud)

哪一种被认为是最佳实践?:)

感谢您的帮助。

c c++ cmake

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