小编Ver*_*ern的帖子

Java在try-catch-finally机制中的返回值

我刚刚遇到以下代码:

public class TestFinally {
    public static void main(String[] args) {
        int returnValue = function();

        System.out.println("Return value: " + returnValue);
    }

    public static int function() {
        try {
            return 1;
        } catch (Exception e){
            return 2;
        } finally{
            return 3;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

毫无疑问,运行此代码将产生"返回值:3"的输出.

但是,我很好奇:

  1. JVM中内部机制.有没有人知道VM是否实际上通过覆盖第一个"返回1"来替换堆栈上的返回值?如果是这样,我在哪里可以找到更多相关信息.
  2. 我还没有找到在这种方式使用的finally机制中返回的用法,并允许在JVM中实现.如果使用此代码构造作为返回错误代码的方法,我认为有更好的方法来记录错误或返回这些错误代码.有没有人发现这种结构的用途?

提前谢谢了.

干杯,Vern

java jvm coding-style

13
推荐指数
2
解决办法
5464
查看次数

如何使用GCC编译器强制执行struct bit顺序?

我想知道是否有一个GCC C编译器指令允许我确定结构打包的位顺序?喜欢的东西:

#pragma bit_order left
Run Code Online (Sandbox Code Playgroud)

这种需求的基本原理是我有以下结构:

struct {
       union {
             unsigned char BYTE;
             struct {
                 unsigned char B0: 1;
                 unsigned char B1: 1;
                 unsigned char B2: 1;
                 unsigned char B3: 1;
                 unsigned char B4: 4;
             }BIT;
       }ITEM;
} myStruct;
Run Code Online (Sandbox Code Playgroud)

有了这个结构,我希望编译器以这种方式打包它:

Bit order: | 7  6  5  4  3  2  1  0 |
Label:     |B0 B1 B2 B3 B4 B5 B6 B7 |
Run Code Online (Sandbox Code Playgroud)

而不是GCC如何做到:

Bit order: | 7  6  5  4  3  2  1  0 |
Label:     |B7 B6 B5 B4 …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction microcontroller gcc bit-fields

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

IA-32e 64位IDT门描述符

英特尔的64位IDT门描述符中有一个段选择器.但是,根据我对5部分英特尔手册的理解,中断处理程序的线性地址从IDT门描述符中指定的64位偏移量加载到RIP中.

段选择器的唯一用途是检查:

  1. 如果权限级别有变化
  2. 中断处理程序真正指向代码段

我的问题是:

  1. RIP仅取自64位偏移量吗?或者RIP =偏移(符号扩展到64位)+段选择器基数?
  2. IDT门描述符中的段选择器指向的基址是否被忽略?或者它有用吗?

提前谢谢了!

assembly operating-system x86-64 intel

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

Bash:'$(())'表示'expr'而'[]'表示'测试'?

我最近一直在使用一些bash脚本,并一直在查看手册页.从我收集到的,是什么$(( ))意思expr和[ ]意思test?

用于$(( )):

echo $(( 5 + 3 ))
Run Code Online (Sandbox Code Playgroud)

具有相同的输出:

echo $(expr 5 + 3)
Run Code Online (Sandbox Code Playgroud)

用于[ ]:

test 'str' = 'str'
Run Code Online (Sandbox Code Playgroud)

具有与以下相同的成功价值:

[ 'str' = 'str' ]
Run Code Online (Sandbox Code Playgroud)

我理解得对吗?

linux bash

5
推荐指数
2
解决办法
575
查看次数

给定TCP/IP校验和的HTTP 1.1 Content-MD5冗余?

我只是想知道,在HTTP 1.1规范中,有一个字段Content-MD5.但是,由于HTTP在整个OSI堆栈中搭载TCP/IP,并且假设TCP/IP具有Header Checksum以确保检查所有传输的数据,我很好奇为什么在HTTP中需要Content-MD5 1.1规格?我误解了或错过了什么吗?

对于我提到的HTTP/1.1标头规范:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.15

对于TCP/IP规范,我在3.1节中提到:

http://www.ietf.org/rfc/rfc791.txt

对我来说,通过在HTTP标头中添加Content-MD5,我们只是在服务器上添加了更多工作.为什么不使用TCP/IP已经提供的机制?

干杯并提前感谢所有:)

linux apache networking tcp http

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