小编doc*_*_id的帖子

如何从给定提交中记录的文件中仅恢复几行?

我想从旧提交中记录的文件中恢复几行.我可以通过跑步看到那些线条

git log -p
Run Code Online (Sandbox Code Playgroud)

作为最后的手段,我准备简单地从该日志的输出中复制那些行,但这会伤害我的纯粹主义者的心脏,而且看起来相当不专业.

希望简单地运行git checkout <file>,因为这将放弃对了本地修改<file>,因为提交的问题.相反,我想<file>仅使用纯Git命令将来自该提交的更改合并到工作树中.

我怎样才能做到这一点?

git git-checkout

19
推荐指数
1
解决办法
579
查看次数

文件修改时间检查的成本

对于Linux下包含少量字节的文件,我只需要处理自上次处理以来它被更改的时间.我通过clearstatcache(); filemtime();定期调用PHP来检查文件是否已更改.由于整个文件总是很小,因此删除对filemtime的调用并通过将内容与过去的内容进行比较来检查文件更改是否会提高性能?或者就性能而言,最好的方法是什么.

php performance filemtime

12
推荐指数
2
解决办法
6170
查看次数

C堆栈变量是否反向存储?

我试图理解C如何在堆栈上分配内存.我一直认为堆栈上的变量可以描述为结构成员变量,它们占用堆栈中连续的,连续的字节块.为了帮助说明我在某个地方发现的这个问题,我创建了这个小程序来重现这个现象.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void function(int  *i) {
    int *_prev_int =  (int *) ((long unsigned int) i -  sizeof(int))  ;
    printf("%d\n", *_prev_int );    
}

void main(void) 
{
    int x = 152;
    int y = 234;
    function(&y);
}
Run Code Online (Sandbox Code Playgroud)

看看我在做什么?假设sizeof(int)是4:我在传递的指针后面看了4个字节,因为它会int y调用者堆栈中的位置之前读取4个字节.

它没有打印152.奇怪的是当我看下4个字节时:

int *_prev_int =  (int *) ((long unsigned int) i +  sizeof(int))  ;
Run Code Online (Sandbox Code Playgroud)

现在它可以工作,打印x调用者堆栈内的任何内容.为什么x地址低于y?堆栈变量是否颠倒存储?

c stack pointers memory-address

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

编译器如何识别字节移位运算符的长度

考虑以下行:

int mask = 1 << shift_amount;

我们知道这mask是 4 个字节,因为它是明确声明的int,但是1要移动的这个长度未知。如果编译器选择 type 为char8 位,或者它的unsigned short大小可能为16 位,那么移位结果实际上将取决于编译器关于如何处理它的决定的大小1。编译器在这里如何决定?以这种方式保留代码是否安全,或者应该改为:

int flag = 1;

int mask = flag << shift_amount;

c c++ bit-manipulation bit-shift

0
推荐指数
1
解决办法
77
查看次数