小编sig*_*g_v的帖子

在shell脚本中,做什么.[!.]*是什么意思?

一个命令,用于打印当前目录中的文件和文件夹列表及其总大小du -sh *.但是,该命令不会列出隐藏的文件或文件夹.我找到了一个命令的解决方案,它可以正确地列出隐藏的文件和文件夹以及其余文件:du -sh .[!.]* *.虽然它完美无缺,但解决方案按原样提供,没有任何解释.

究竟是什么意思.[!.]*?它是如何工作的?

bash gnu-coreutils

5
推荐指数
1
解决办法
1616
查看次数

如果使用alloca在内联函数中在堆栈上分配变量,那么在内联函数返回后它的引用是否有效?

我知道编译器可能不会将inline函数展开到调用函数中,以避免与调用外部函数相关的开销.然而,我也知道,inline函数的链接方式与外联函数不同,所以我不能指望它们的行为完全相同.

虽然我实际上在使用C++,但我正在使用api开发一个程序,在这个程序中使用C宏很方便,它们看起来像:

#define func_alloca(ptr) do { *ptr = alloca(size); memset(*ptr, 0, size); }
Run Code Online (Sandbox Code Playgroud)

为了不在不同的函数中多次重复代码,对我来说能够实现一系列这些alloca调用是有用的.我的问题是,(特别是在gcc中,因为alloca是实现定义的),我可以alloca在inline函数内部使用函数初始化堆栈中的变量,并指望它们在外部工作吗?这是我想要做的一个例子:

inline void uses_alloca(type*& ptr){
    // do stuff
    func_alloca(ptr);
}

void calls_inline(){
    type *local_ptr;
    uses_alloca(local_ptr);
    // is local_ptr valid?
}
Run Code Online (Sandbox Code Playgroud)

如果确实有效,它会一直有效吗?不仅如此,编译器选择将inline函数展开到调用函数中?

编辑:

我的猜测是,这可能会起作用,因为alloca调用do{}在宏中包含的局部作用域之外已经有效,并且因为,如果我理解正确,函数实际上在C++中实际上没有与do{}块.我的问题依然存在:这alloca是应该在gcc中运行的吗?这是定义的行为吗?

c++ g++ inline

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

内联汇编的"真实"用途是什么?

在原始C中我们无法在装配中做任何事情吗?或者在装配中更容易做的事情?任何现代代码是使用内联汇编实际编写的,还是仅仅作为遗留或教育功能实现?

c assembly inline-assembly

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

标签 统计

assembly ×1

bash ×1

c ×1

c++ ×1

g++ ×1

gnu-coreutils ×1

inline ×1

inline-assembly ×1