标签: low-level-code

了解Java字节码和JVM

在最近提出的一个问题中,我简单的回答强调了我对Java,JVM以及代码如何编译和运行的许多误解.这使我产生了将我的理解提升到较低水平的愿望.像汇编这样的低层次理解我没有问题字节码和JVM如何让我感到困惑.面向对象的代码如何在低级别上分解对我来说是丢失的.我想知道是否有人对如何了解JVM,字节码和Java的低级功能有任何建议.是否有任何实用程序允许您直接编写和运行字节码,因为我相信亲身体验某些东西是理解它的最佳方式?此外,我们将不胜感激地阅读有关该主题的建议.

编辑:次要问题.所以我有一个小问题,答案给了我一个有趣的想法来了解jvm,写一个非常简单的语言如brainf**k或Ook的合理性只是用一种可读的语法(也许我甚至可以开发它)最终支持oo)编译成字节码是什么?这会是一个很好的学习经历吗?

java jvm bytecode low-level-code

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

如何检查文件描述符是否已关闭?

在POSIX环境中使用系统调用来操作文本文件(open(), close(), read(), write())时,有没有办法检查我在使用时是否实际关闭了文件描述符close(file_descriptor)

示例:

int main(int argc, char **argv)
{
    int input_file; // file descriptor for input file
    int output_file; // file descriptor for output file
    input_file = open(argv[1], O_RDONLY));
    ouput_file = open(argv[2], ...file properties & permissions and crap.....);

    // blah blah blah...

    close(input_file);
    close(output_file);

    // what can I code here to check if the file descriptor was actually closed?
}
Run Code Online (Sandbox Code Playgroud)

c low-level low-level-code low-level-io

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

使用Qemu的ARM程序集

好吧,我已经在整个互联网上搜索了将使用arm-linux-gnueabi-as和qemu运行的代码.要打印整数值.来自字符串.例程会有所帮助.

arm qemu low-level-code low-level-io

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

C ++重新解释类型转换和C样式转换之间的区别

码:

char keyStr[50]={ 0x5F, 0x80 /* bla bla */ };
uint32_t* reCast  = reinterpret_cast< uint32_t* >( &keyStr[29] );
uint32_t* reCast2 = ( uint32_t* )&keyStr[29];
if( reCast == reCast2 ){
    cout << "Same Thing!";
}
Run Code Online (Sandbox Code Playgroud)

输出:

一样!

我想知道这两种铸造方法有什么区别。另外,如果您可以(通过示例)指定static_cast,dynamic_cast和您知道的其他类型的转换之间的差异(即,保持较低的级别并尽可能接近汇编语言)。

static_cast
dynamic_cast
const_cast
reinterpret_cast
C-style cast (type)value
Function-style cast type(value)
Run Code Online (Sandbox Code Playgroud)

谢谢。

请阅读我从上面的示例中了解到的PS,reinterpret_cast将int指针分配给int指针keyStr [29]的地址在汇编中将转换为:

lea eax, [keyStr+1D]
mov [reCast], eax
Run Code Online (Sandbox Code Playgroud)

因此,换句话说,从低级别的角度来看,reinterpret_cast根本没有危险,因为它不会修改原始数据。

我想知道其他铸造方法在低水平方面的表现。因此,例如,对象以低级方式仅仅是保存地址的变量。以及该对象的类型是编译器随后如何解释该地址及其偏移量。对象(即另一个指针))。另一件事可能是相同的,就是int和int *或unsigned int和int之间的区别;所有4个声明都生成相同的汇编指令。(推送值)或(sub esp-(int的长度)&& mov esp,值)我希望这可以澄清问题,以及为什么我将其标记为“低级代码”和“汇编”

PS在此程序中,我尝试创建我不在乎非可移植性或其他高级内容。我正在尝试尽可能降低级别,并尽可能接近汇编语言。这意味着,对于该程序,内存只是内存(即0和1位),类型并不重要(例如,我不在意内存地址:0x123是“ int”类型还是“ float”类型,只是“数据”)

c c++ assembly casting low-level-code

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

我在哪里可以找到低级声音编程理论教程

我是一名中级图形程序员.我想从头开始学习音频/声音处理理论.

就像"A像素"及其组件R,G,B,A是图形编程的基本部分一样.我想知道类似的声音编程.

有人能指出我的好链接吗?另外我想知道一些允许我操纵声音的库(最好是便携式的).可以直接用于mp3,amr文件的东西.

我也不介意书的推荐:)

audio low-level-code

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

如何拆分ASCII字符的十六进制字节

我基本上想做的是

对于例如:"A"六角equivalant是0x61,我可以拆分6161,并将其保存为'6''1'

缓冲区正在接收如下数据:

rx_dataframe.data[0] is H'00,'.'// H' is Hex equivalant and '' is ASCII value
rx_dataframe.data[0] is H'31,'1'
rx_dataframe.data[0] is H'32,'2'
rx_dataframe.data[0] is H'33,'3'
Run Code Online (Sandbox Code Playgroud)

我需要转换hex values 0x00,0x31,0x32,0x33为char值'0','0','3','1','3','2';'3','3' 并将它们存储在的位置tx_buff_data[];

我想要tx_buff_data这样的样子

tx_buff_data[0] have H'30,'0'
tx_buff_data[1] have H'30,'0'
tx_buff_data[2] have H'33,'3'
tx_buff_data[3] have H'31,'1'
tx_buff_data[4] have H'33,'3'
tx_buff_data[5] have H'32,'2'
tx_buff_data[6] have H'33,'3'
tx_buff_data[7] have H'33,'3'
Run Code Online (Sandbox Code Playgroud)

c microcontroller low-level-code

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

C代码 - 一种将5转换为7和7转换为5而无需"if"的方法

我想编写一个获得数字X的函数,如果X = 5则返回7,如果X = 7则返回5,否则返回其他内容.有一些简单的方法 - 使用"if"块另一种方式 - 使用地图(5映射到7,7映射到5)第三种方式 - 写出匹配的线性数学方程式但是我正在寻找第4种方式这样做(再次 - 根本不使用"if"块).

感觉我需要使用位操作,但我在这方面不占优势,所以我需要帮助.

有任何想法吗?

谢谢!

c bit-manipulation low-level low-level-code

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

if (n!=0) n=0; v/s n=0; Which is more efficient and why?

While typing a program as a high level programmer, n = 0; looks more efficient and clean.

But is n = 0; really more efficient than if (n != 0) n = 0;?

  1. when n is more likely to be 0.

  2. when n is less likely to be 0.

  3. when n is absolutely uncertainty.

Language: C (C90)

Compiler: Borland's Turbo C++

Minimal reproducible code

void scanf();

void main()
{
int n; // 2 bytes

n=0; // Expression …
Run Code Online (Sandbox Code Playgroud)

c variables if-statement machine-code low-level-code

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

将 4 个字节扩展为 8 个字节的最快方法(32 位 -&gt; 64 位)

假设你有一个32位无符号整数,其中字节举办这样的:a b c d。什么是这些字节扩展到64位无符号整数,以这种方式最快的方法: 0 a 0 b 0 c 0 d?它是为了x86-64架构。我想知道不使用特殊内在函数的最快方法,尽管这也很有趣。(我说'最快',但具有合理性能的紧凑解决方案也很好)。

为需要上下文的人编辑。这似乎是一项非常简单的工作,只需移动一些字节,但它需要的指令比您想象的要多(检查这个带优化的神箭)。因此,我只是想知道是否有人知道一种可以用更少的指令解决问题的方法。

c c++ performance low-level-code

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