小编ene*_*dil的帖子

堆栈分配在 Linux 中是如何工作的?

操作系统是否为堆栈或其他东西保留了固定数量的有效虚拟空间?我是否能够仅通过使用大局部变量来产生堆栈溢出?

我写了一个小C程序来测试我的假设。它在 X86-64 CentOS 6.5 上运行。

#include <string.h>
#include <stdio.h>
int main()
{
    int n = 10240 * 1024;
    char a[n];
    memset(a, 'x', n);
    printf("%x\n%x\n", &a[0], &a[n-1]);
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行程序给出&a[0] = f0ceabe0&a[n-1] = f16eabdf

proc 映射显示堆栈: 7ffff0cea000-7ffff16ec000. (10248 * 1024B)

然后我尝试增加 n = 11240 * 1024

运行程序给出&a[0] = b6b36690&a[n-1] = b763068f

proc 映射显示堆栈: 7fffb6b35000-7fffb7633000. (11256 * 1024B)

ulimit -s10240在我的电脑上打印。

如您所见,在这两种情况下,堆栈大小都大于ulimit -s给出的大小。并且堆栈随着更大的局部变量而增长。堆栈顶部以某种方式减少了 3-5kB &a[0](AFAIK,红色区域为 128B)。

那么这个堆栈映射是如何分配的呢?

linux memory virtual-memory stack

20
推荐指数
2
解决办法
2万
查看次数

如何在 i3 中设置 GTK 图标主题?

如何更改 i3 中的图标主题?如果这很重要,我正在研究 Arch Linux。我用谷歌搜索,但我只能找到有关 GTK 主题的信息,而不是图标。

icons gtk i3

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

chdir(&lt;directory&gt;) 在退出到 shell 后不改变目录

我想制作一个简单的C程序来更改我的项目目录。其内容如下:

#include <unistd.h>
int main()
{
    chdir("/home/enedil/projects/algo");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用以下命令编译它(pro.c是它的文件名):

gcc pro.c -o /usr/local/bin/pro
Run Code Online (Sandbox Code Playgroud)

没有错误或警告。但是,当我运行它,它并不会改变目录。为什么?

process c cd-command

9
推荐指数
2
解决办法
2万
查看次数

ArchLinux 上的 KDE 和 LightDM

是否可以在 Archlinux 上将 LightDM 与 KDE 一起使用?维基说

基本上有两种启动 KDE 的方法。使用 KDM 或 xinitrc。

我还使用很棒的 WM 和 XFCE,所以我想使用 LightDM。

kde arch-linux lightdm kdm

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

左控制键在 virtualbox 中不起作用

我有问题。我正在尝试在 virtualbox 中安装 Gentoo。我无法使用, nano因为当我按Ctrl+ 时x,我看到,我已经x写了信。Ctrlvirtualbox 中的密钥有问题。我见过类似的问题,但答案对我不起作用。有任何想法吗?

virtualbox

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

标签 统计

arch-linux ×1

c ×1

cd-command ×1

gtk ×1

i3 ×1

icons ×1

kde ×1

kdm ×1

lightdm ×1

linux ×1

memory ×1

process ×1

stack ×1

virtual-memory ×1

virtualbox ×1