小编Viv*_*ran的帖子

堆栈和堆内存的大小

可能重复:
堆栈和堆的内容和位置是什么?

关于ac程序中内存布局的基本概念,我理解:

  • 该语言使用两个主要数据结构堆栈.
  • 创建堆栈以存储子程序的局部变量和簿记数据
  • 创建堆以存储程序的动态分配变量
  • 堆本质上是可变长度的.(在堆栈上不太确定)
  • 通常,编译器/语言负责在执行之前请求OS创建这些数据结构.

问题

  • 堆栈/堆的初始大小是多少?谁来决定呢?
  • 在哪里创建物理内存?我看到一般描述为"在顶级地址中创建堆栈,在低级别地址创建堆"请详细说明

c heap stack memory-management

43
推荐指数
4
解决办法
6万
查看次数

信号和中断比较

基于各种参考文献,我在Linux中信号的主观定义是"用于通知进程有关特定事件发生的触发器.此处的事件可能涉及软件异常.此外,信号也可用于IPC机制. " 我的问题是

  • 我假设只通过信号通知例外(软件中断).硬件中断的情况.
  • 信号的各种来源是什么?对我而言,内核始终是信号的来源.(除了用于IPC)
  • 信号处理程序和ISR之间的区别?
  • 信号阻塞和中断屏蔽之间的区别?

linux posix signals interrupt isr

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

指针大小:依赖因素

我发现很难理解指针变量大小C所依赖的因素.我检查了一些参考文献,我到目前为止获得的唯一信息是pointer尺寸取决于处理器架构.我想知道以下细节

  • 请详细说明架构如何影响指针大小.
  • 一般情况下,如果指针是x bits那么0 to 2^(X)-1地址位置的数量应该在那里.我正在丢失跟踪,同时关联地址位置数量和程序可用的实际内存量.

c size pointers 32bit-64bit

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

C中的bss段

关于 " 关于Unix中的bss段和数据段 "的问题的答案之一中,我看到对bss的解释如下:

Bss是特殊的:.bss对象不占用目标文件中的任何空间,并且通过将未特别初始化的所有符号分组在一起,可以很容易地将它们一次归零.

但是当我在目标文件上使用size时,会生成代码:

#include <stdio.h>
int uninit_global_var;
int init_global_var=5;

int main()
{
   int local_var;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我有以下内容

text    data      bss    dec     hex filename
1231     280      12    1523     5f3 a.out
Run Code Online (Sandbox Code Playgroud)

并根据具有全局范围的未初始化数据成员查看bss的增长情况.那么有人可以证明上述陈述的合理性吗?

c memory-management data-segment

8
推荐指数
2
解决办法
3930
查看次数

签名类型的按位移位运算符

我试图理解有符号运算符在有符号和无符号类型上的行为.根据ISO/IEC文件,以下是我的理解.

左移算子

  • 结果是E1 << E2,E1左移E2位位置

  • 左移帐户中腾出的位将由零填充.

  • E1为有符号非负: E1 << E2如果该值可由结果类型表示,则将E1乘以E2的2次幂.

  • Q1:签署否定书怎么样?

  • Q2:在下面的上下文中,我无法理解"减少模数"的含义."如果E1具有无符号类型,则结果的值为E1×2E2,比结果类型中可表示的最大值减少一个模数".

右移算子

  • 结果E1 >> E2是E1右移E2位的位置.

  • E1为有符号非负/无符号:结果的值是E1/2E2的商的整数部分

  • Q3:对于有符号的负整数,我看到,有些书定义了空位将被填充1.请详细说明使用右移运算符对带符号的负int.

c iso bit-manipulation bit-shift bitwise-operators

7
推荐指数
2
解决办法
3935
查看次数

在Kconfig文件中获取环境变量值的语法

任何人都可以提供在Kconfig文件中获取环境变量值的语法吗?

根据环境变量的值,我需要有条件地获取另一个Kconfig文件.

linux-kernel

6
推荐指数
2
解决办法
3443
查看次数

使用POSIX API读取文件

考虑下面的代码片段,用于将文件内容读入缓冲区

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define BLOCK_SIZE 4096

int main()
{
   int fd=-1;
   ssize_t bytes_read=-1;
   int i=0;
   char buff[50];
   //Arbitary size for the buffer?? How to optimise.
   //Dynamic allocation is a choice but what is the
   //right way to relate the file size to bufffer size.

   fd=open("./file-to-buff.txt",O_RDONLY);
   if(-1 == fd)
   {
      perror("Open Failed");
      return 1;
   }

   while((bytes_read=read(fd,buff,BLOCK_SIZE))>0)
   {
      printf("bytes_read=%d\n",bytes_read);
   }

   //Test to characters read from the file to buffer.The file contains "Hello"
   while(buff[i]!='\0')
   { …
Run Code Online (Sandbox Code Playgroud)

c linux string file-io posix

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

SIOCETHTOOL vs SIOCGMIIPHY vs SIOCGIFFLAGS

经过在互联网上的一些搜索,我发现以下是可用于获取/设置以太网接口参数的选项列表。

  1. SIOCETHTOOL
  2. SIOCGMIIPHY
  3. SIOCGIFFLAGS

我什至看到一些关于SIOCETHTOOL的使用的“stackoverflow”问题。但我的问题是:

  1. 对这三个接口(指 API)在多个内核中提供和支持的功能进行比较。何时应优先选择其中一个选项。
  2. 我几乎找不到SIOCETHTOOL和的文档SIOCGMIIPHY。你能指点一下吗?

c linux ioctl ethernet driver

6
推荐指数
0
解决办法
1407
查看次数

insmod失败,因为模块中的未知符号

当我做一个内核对象的insmod.由于该模块中的一些未知符号而失败.

但由于某些原因,它没有向我显示符号(它表示为未知).

无论如何找到那个?请指教.

linux-device-driver

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

linux open调用返回EINVAL的可能原因

我试图在我的源代码中进行系统调用,如下所示。

int file;
file = open(argv[index], O_RDONLY);
Run Code Online (Sandbox Code Playgroud)

其中命令行参数是我的文件系统中二进制文件的路径。但是这个调用给我带来了一个EINVAL错误。我已检查文件是否存在以及访问该文件所需的权限。

任何关于什么情况下EINVAL错误的建议都会被抛出。

c linux

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