首页 > 试题广场 >

对于Linux说法,下列说法正确的是?

[单选题]
对于Linux说法,下列说法正确的是()
  • 线性访问内存非法时,当前线程会进入信号处理函数
  • 用mv命令移动文件时,文件的修改时间会发生变化
  • ulimit -c设置的是函数调用栈的大小
  • malloc函数是操作系统最底层申请内存的接口
推荐
A
B:不会变化
C:ulimit用于shell启动进程所占用的资源.-c size:设置core文件的最大值.单位:blocks
D:malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具***置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
编辑于 2015-04-01 15:16:58 回复(12)
malloc是库函数,"操作系统申请内存的接口 "指的是系统调用,库函数中封装了系统调用,库函数与系统调用是两个不同的概念。所以D选项错误。
发表于 2016-07-04 11:36:21 回复(0)
malloc是glibc里的库函数,它封装了一些向系统申请内存的系统调用,而且并不是每次使用malloc的时候都会向系统申请新的内存,所以D是错的
发表于 2015-08-05 11:52:47 回复(3)
但是我选的D,我认为D没有问题,不知道为何错误。刚开始没理解A,如何进入信号处理程序的。
后来想明白,进入非法内存,就会引起非法内存访问的信号,而此信号的动作是终止程序
不知道理解是否有误?
发表于 2015-08-10 16:00:53 回复(0)
B:不会变化
C:ulimit用于shell启动进程所占用的资源.-c size:设置core文件的最大值.单位:blocks
D:malloc叫动态内存分配。
发表于 2021-11-04 16:39:19 回复(0)
malloc是一个系统函数,它封装了系统调用,这些调用将申请系统内存。
发表于 2016-07-12 20:49:12 回复(0)
mv不会改变文件的修改时间
ulimit -s 是设置函数调用栈的大小
malloc 是编程者向系统申请分配指定字节的内存空间
发表于 2015-08-04 22:32:41 回复(0)
B   文件会随着mv而改变时间 
发表于 2015-06-12 15:14:56 回复(0)
malloc只是封装的库函数不是系统调用
brk、mmap才是分配内存的系统调用
发表于 2016-08-06 12:21:45 回复(0)
ulimit  -s size:设置 堆栈 的最大值.单位:kbytes
发表于 2015-08-26 14:25:59 回复(0)

ulimit 参数说明

选项 [options] 含义 例子
-H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬资源,线程栈大小为 64K。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn 32;限制软资源,32 个文件描述符。
-a 显示当前所有的 limit 信息。 ulimit – a;显示当前所有的 limit 信息。
-c 最大的 core 文件的大小, 以 blocks 为单位。 ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。
-d 进程最大的数据段的大小,以 Kbytes 为单位。 ulimit -d unlimited;对进程的数据段大小不进行限制。
-f 进程可以创建文件的最大值,以 blocks 为单位。 ulimit – f 2048;限制进程可以创建的最大文件大小为 2048 blocks。
-l 最大可加锁内存大小,以 Kbytes 为单位。 ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。
-m 最大内存大小,以 Kbytes 为单位。 ulimit – m unlimited;对最大内存不进行限制。
-n 可以打开最大文件描述符的数量。 ulimit – n 128;限制最大可以使用 128 个文件描述符。
-p 管道缓冲区的大小,以 Kbytes 为单位。 ulimit – p 512;限制管道缓冲区的大小为 512 Kbytes。
-s 线程栈大小,以 Kbytes 为单位。 ulimit – s 512;限制线程栈的大小为 512 Kbytes。
-t 最大的 CPU 占用时间,以秒为单位。 ulimit – t unlimited;对最大的 CPU 占用时间不进行限制。
-u 用户最大可用的进程数。 ulimit – u 64;限制用户最多可以使用 64 个进程。
-v 进程最大可用的虚拟内存,以 Kbytes 为单位。 ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes。

 

发表于 2017-04-06 11:37:43 回复(1)
A:访问非法内存时,发生缺页中断,调用中断处理程序,进入内核态,根本不会执行线程的什么方法
D:我认为没问题
发表于 2016-08-22 03:58:32 回复(2)

请问,A选项访问非法触发中断信号,中断若被受理,不应该是当前进程挂起,切换到异常处理么?

发表于 2015-11-11 08:44:31 回复(0)
不同的操作系统有着不同的动态内存管理方式,他们有着各自不同的实现方式,也就是应用程序向操作系统申请内存的接口,为了程序的可移植性,开发语言的库函数中会有对这些底层系统调用的封装,即malloc/free,它只是一个库函数而已,不是真正的接口
发表于 2015-08-18 09:11:04 回复(0)
A
发表于 2015-03-01 09:47:50 回复(0)

A. 当程序尝试访问非法的内存地址时,例如访问未分配或者已释放的内存,操作系统会检测到这个错误并向进程发送一个信号(通常是SIGSEGV信号)。进程会根据自定义的信号处理函数来处理这个信号。如果没有为该信号设置自定义处理函数,操作系统会默认将进程终止。

C. ulimit -c设置的是函数调用栈的大小:这个说法是不正确的。ulimit -c命令用于设置生成的核心转储文件的最大大小,而不是设置函数调用栈的大小。函数调用栈的大小可以使用ulimit -s来设置。

D. malloc函数是操作系统最底层申请内存的接口:这个说法是不正确的。malloc函数是C语言标准库中的函数,用于在堆上动态分配内存。它并不直接与操作系统的底层接***互,而是通过操作系统提供的系统调用(如brk或mmap)来向操作系统请求内存。

发表于 2023-11-01 11:07:15 回复(0)

 D为什么是错的呢,我认为没有问题啊???
                                                                                    
发表于 2015-08-02 22:33:12 回复(2)
操作系统最底层申请空间方式的应该是brk()\sbrk()+mmap()吧
发表于 2023-08-10 08:36:46 回复(0)

如果目录 B 与文件 A 所在的目录不在同一个文件系统,则文件 A 的内容会被复制到目录 B 并删除原来的文件 A,这个操作会导致文件 A 的修改时间更新。如果目录 B 与文件 A 所在的目录在同一个文件系统,则文件 A 只会在文件系统目录中的位置被更新,其他元数据信息如 inode 号等都不会改变,这种情况下文件 A 的修改时间不会更新。


发表于 2023-04-28 16:38:53 回复(0)
🤩
发表于 2021-06-03 21:25:56 回复(0)
信号处理器函数可能会在任一时间点异步中断程序的执行, 从而在同一进程中形成了两条(主程序和信号处理函数)独立的执行函数。
发表于 2020-09-21 14:06:30 回复(0)