小编dea*_*nix的帖子

扩展填充结构时,为什么不能在尾部填充中放置额外的字段?

让我们考虑结构:

struct S1 {
    int a;
    char b;
};

struct S2 {
    struct S1 s;       /* struct needed to make this compile as C without typedef */
    char c;
};

// For the C++ fans
struct S3 : S1 {
    char c;
};
Run Code Online (Sandbox Code Playgroud)

S1的大小为8,由于对齐而预期.但是S2和S3的大小是12.这意味着编译器将它们构造为:

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
|       a       | b |  padding  | c |  padding  |
Run Code Online (Sandbox Code Playgroud)

编译器可以在不破坏对齐约束的情况下将c放在6 7 …

c c++ struct memory-alignment

37
推荐指数
2
解决办法
2370
查看次数

允许简单的if语句,而不是在codestyle中没有大括号

我使用checkstyle来检查我的java代码是否符合我们项目的指导原则.

但是,我们有一个指南,我无法弄清楚如何使用此工具进行检查.我们想要允许简单的if(理解是否没有其他,没有其他条件结构)没有大括号,就像在这个例子中:

// valid
if(condition) callFunction();

// invalid
if(condition) for(int i = 0; i < someValue; i++) callFunction(i);

// valid
if(condition) {
    for(int i = 0; i < someValue; i++) {
        callFunction(i);
    }
}

// invalid
if(condition) callFunction();
else callOtherFunction();
Run Code Online (Sandbox Code Playgroud)

可以讨论这个约定,但这是我们选择的.它允许减少非常琐碎的if语法,但确保我们对更复杂的结构有良好的缩进和块定界.

任何帮助都将非常感激.

我还准备做一些代码来执行此检查,如果没有可用的,但实际上不知道从哪里开始.在最后一次报道中,关于这一点的一些提示也将受到赞赏.

java if-statement checkstyle

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

如何在Linux上的同一物理内存上映射两个虚拟地址?

我面临一个相当棘手的问题.我正在尝试将2个虚拟内存区域指向相同的物理内存.关键是在不同的内存区域上有不同的页面保护参数.

在这个论坛上,用户似乎有一个解决方案,但它似乎有点hacky并且很明显可以在性能方面做得更好:http: //www.linuxforums.org/forum/programming-scripting/19491-map -两个虚存储器ADDRES-相同物理-page.html中

当我面临同样的问题时,我想在这里试一试,知道是否有人有更好的想法.不要害怕提到引擎盖后面的脏细节,这就是这个问题的内容.

提前谢谢.

c linux memory low-level

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

括号中的数字在 readelf 输出中意味着什么?

在可执行文件上使用 readelf 时,我在一些符号名称后的括号中得到一个数字。例如:

Num:    Value          Size Type    Bind   Vis      Ndx Name
 49: 00000000002052a0     8 OBJECT  GLOBAL DEFAULT   27 stderr@GLIBC_2.2.5 (3)
Run Code Online (Sandbox Code Playgroud)

(3)在这种情况下,stderr 的符号名称后面有一个。这是什么意思?

linux readelf

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