小编Geo*_*rge的帖子

在Android上运行Java字节码 - 在DalvikVM上运行Sun JVM

由于java implementation(OpenJDK)和Android的虚拟机DalvikVM都是开源的,因此必须能够在Google的DalvikVM上实现Sun的JavaVM.这样就可以Clojure, Jython在android上运行基于JVM的应用程序和开箱即用的语言().

是否正在不断努力生成Sun JVM的这种实现?

java android jvm clojure

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

理解一大堆未经证实的源代码?

我一直对葡萄酒感到惊讶.有时我想破解它,修复一些小东西并且通常理解它是如何工作的.所以,我下载了Wine源代码,之后我感到不堪重负.代码库是巨大的 - 与Linux内核不同 - 几乎没有关于代码的指南.

理解如此庞大的代码库的最佳实践是什么?

wine codebase

17
推荐指数
4
解决办法
6281
查看次数

使用GCC的C++内联函数 - 为什么要调用CALL?

我一直在用C++测试内联函数调用.

Thread model: win32
gcc version 4.3.3 (4.3.3-tdm-1 mingw32)
Run Code Online (Sandbox Code Playgroud)

C++编程语言中的Stroustrup:

内联说明符是编译器的一个提示,它应该尝试生成代码内联,而不是为函数设置一次代码,然后通过通常的函数调用机制调用.

但是,我发现生成的代码根本不是内联的.有一个CALL为instrction 国际广场的功能.

替代文字http://i42.tinypic.com/8ys3f4.jpg

为什么会这样?那我怎么能使用内联函数呢?

编辑:使用的命令行选项:

**** Build of configuration Debug for project InlineCpp ****

**** Internal Builder is used for build               ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -osrc\InlineCpp.o ..\src\InlineCpp.cpp
g++ -oInlineCpp.exe src\InlineCpp.o
Run Code Online (Sandbox Code Playgroud)

c++ inline tdm-mingw

17
推荐指数
3
解决办法
9490
查看次数

C#:从IEnumerable获取随机值的优雅代码

在Python中,我可以这样做:

>>> import random
>>> ints = [1,2,3]
>>> random.choice(ints)
3
Run Code Online (Sandbox Code Playgroud)

在C#中,我做的第一件事是:

var randgen = new Random();
var ints = new int[] { 1, 2, 3 };
ints[randgen.Next(ints.Length)];
Run Code Online (Sandbox Code Playgroud)

但这需要索引,也需要复制ints困扰我.所以,我想出了这个:

var randgen = new Random();
var ints = new int[] { 1, 2, 3 };
ints.OrderBy(x=> randgen.Next()).First();
Run Code Online (Sandbox Code Playgroud)

仍然不是很好,很有效率.是否有更优雅的方式从IEnumberable获取随机值?

c#

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

C++空String构造函数

我是一名C++初学者,如果问题太基础,那就很抱歉.

我试图收集字符串constrcturs并尝试所有它们(记住它们).

string strA();          // string(); empty string // incorrect
string strB("Hello");   // string( const char* str)
string strC("Hello",3); // string( const char* str, size_type length)
string strD(2,'c');     // string( size_type lenght, const char &c)
string strE(strB);      // string( const string& s)

cout << strA << endl;
cout << strB << endl;
cout << strC << endl;
cout << strD << endl;
cout << strE << endl;
Run Code Online (Sandbox Code Playgroud)

strA外,所有这些都有效.它打印"1".为什么?在这种情况下,strA的类型是什么?当我不确定时,如何检查东西的类型?

我注意到这是正确的方法(顺便说一句,这似乎与其他构造函数不一致,有时候parens有时没有parens):

string strA;
Run Code Online (Sandbox Code Playgroud)

ps:大胆的问题,通常不相关的答案将被低估.

c++ string

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

如何修复警告:"签名和未签名之间的比较"?

我被建议在GCC中使用以下选项,因为它有助于避免许多常见错误.它会打开一堆警告并将-Werror其变成错误.

gcc -pedantic -W -Wall -Wextra -Wshadow -Wstrict-overflow=5 -Wwrite-strings -std=c99 -Werror
Run Code Online (Sandbox Code Playgroud)

鉴于以下测试代码:

#include <stdio.h>

int main(void)
{
    int arr[8]={0,10,20,30,40,50,60,70};
    int x;

    printf("sizeof(arr): %d\n", sizeof(arr));
    printf("sizeof(int): %d\n", sizeof(int));

    for(x = 0; x < sizeof(arr)/sizeof(int); x++)
    {
        printf("%d\n",arr[x]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

test.c:11: error: comparison between signed and unsigned
Run Code Online (Sandbox Code Playgroud)

我知道我能解决这个问题的一种方法就是关闭警告,但是他们还没有让我使用这些设置来最终关闭它们.

另一种方法是投射东西,但我被告知铸造已被弃用.

另外,我可以将x变为unsigned int:

unsigned x;
Run Code Online (Sandbox Code Playgroud)

但是,当我必须使用这些编译器选项将带符号值与无符号值进行比较时,它无法解决一般问题.是否有更清洁的方式而不是铸造?

c

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

GCC:空程序== 23202字节?

test.c:

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我没有使用任何标志(我是gcc的新手),只是命令:

gcc test.c
Run Code Online (Sandbox Code Playgroud)

我在win32上使用了最新的GDM TDM版本.生成的可执行文件几乎是23KB,对于空程序来说太大了.

如何减小可执行文件的大小?

c c++ linker gcc tdm-mingw

14
推荐指数
5
解决办法
2000
查看次数

在处理只读List <T>成员时,我应该如何使用属性

当我想在我的课外制作一个只读的值类型时,我这样做:

public class myClassInt
{
    private int m_i;
    public int i {
        get { return m_i; }
    }

    public myClassInt(int i)
    {
        m_i = i;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以做些什么来List<T>在我的课堂之外创建一个readonly类型(所以他们不能在其中添加/删除元素)?现在我只是宣布公开:

public class myClassList
{
    public List<int> li;
    public  myClassList()
    {
        li = new List<int>();
        li.Add(1);
        li.Add(2);
        li.Add(3);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# collections readonly

10
推荐指数
3
解决办法
8179
查看次数

C++:在MSVC中使用__stdcall回调typedef

这个typedef:

typedef DWORD WINAPI
(* CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD);
Run Code Online (Sandbox Code Playgroud)

在BorlandCpp中编译很好,但是,当我在msvc中编译它时我必须删除WINAPI(这只是一个别名__stdcall):

typedef DWORD
(* CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD);
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我可以安全地删除WINAPI部分吗?

更新:我必须从typedef中删除"WINAPI",否则我得到了

 error C2059: syntax error : '('
Run Code Online (Sandbox Code Playgroud)

为线.

你能告诉我为什么Borland可以用"WINAPI"编译它而Msvc不能吗?

c++ typedef visual-c++

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

CPU如何实现MUL/MULT等指令?

在不同的汇编语言中,MUL(x86)/ MULT(mips)指的是乘法.这是程序员的黑盒子.我感兴趣的是,无论架构如何,CPU实际上如何实现乘法.假设我的寄存器中有两个16位值,而且我是cpu,所以我必须使用其他的bit-fiddling指令实现MUL(和,或者,xor,not,shl,shr等).我该怎么办?

cpu assembly boolean low-level digital-logic

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