小编Rya*_*yan的帖子

为什么malloc没有"耗尽"我电脑上的内存?

所以我有这个程序分配256 MB的内存,并在用户按下ENTER后释放内存并终止.

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

int main(void) {
    char *p, s[2];

    p = malloc(256 * 1024 * 1024);
    if ( p == NULL) 
        exit(1);

    printf("Allocated"); 
    fgets(s, 2, stdin);
    free(p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我多次运行这个程序并对每个程序进行后台处理,直到没有足够的内存可以分配.但是,这从未发生过.我运行了一个linux top命令,甚至在多次运行这个程序之后,空闲内存永远不会下降到256 MB.

但是,另一方面,如果我使用calloc而不是malloc那时有一个巨大的差异:

p = calloc(256 * 1024 * 1024, 1);

现在,如果我运行该程序并对其进行后台处理,并重复,每次运行它时,可用内存将减少256 MB.为什么是这样?为什么不会malloc导致可用的可用内存发生变化,但是calloc呢?

c linux malloc memory-management

12
推荐指数
3
解决办法
2424
查看次数

删除C程序中的所有注释 - 对此代码的任何可能的改进?

我正在从K&R书中学习C,在第一章中学习练习1.23,我必须编写一个程序,删除用户输入的一些C代码的所有注释.到目前为止,这是我完成的程序.我能做些什么改进吗?

/**
 Tuesday, 10/07/2013

 Exercise 1.23
 Write a program to remove all comments from a C 
 program. Don't forget to handle quoted strings 
 and character constants properly. C comments   
 don't nest.
**/

#include <stdio.h>
#define MAX_LENGTH 65536
#define NOT_IN_COMMENT 0
#define SINGLE_COMMENT 1
#define MULTI_COMMENT  2

main()
{
    char code[MAX_LENGTH];        /* Buffer that stores the inputted code */
    int size = 0;                 /* Length of the inputted code */
    int loop;                     /* Integer used for the for loop */
    char …
Run Code Online (Sandbox Code Playgroud)

c

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

为什么itoa()修改传递的char []而不是返回char []?

是否有任何理由为什么itoa()函数返回void并将结果存储在传递给它的char []数组中,而不是返回char []?

c c++

4
推荐指数
1
解决办法
419
查看次数

进行管道传输时,为什么在使用 dup2() 之前必须先 close() 管道的另一端?

在此代码示例中,我注意到您必须在写入之前关闭管道读取缓冲区的另一端,反之亦然。为什么会这样?如果不关闭对端会产生什么样的后果或副作用?

int main() {
  char b[20];
  int p[2];
  int rc = pipe( p );
  int pid = fork();

  if ( pid > 0 ) {
    close( p[0] );
    rc = dup2( p[1], 1 );
  }

  printf( "0987654321" );
  fflush( NULL );

  if ( pid == 0 ) {
    close( p[1] );
    rc = read( p[0], b, 6 );
    b[rc] = '\0';
    printf( "%d-%s\n", getpid(), b );
  }
  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

c pipe

4
推荐指数
1
解决办法
1904
查看次数

无法在PHP shell_exec()中运行"cd"命令

我最近在我大学的以太网连接上安装了我的笔记本电脑.现在我可以从任何地方连接到我的电脑,只要我有IP地址或主机名(我可以选择).现在我想创建一个基于Web的命令提示符,让我可以从任何设备上运行我的笔记本电脑上的命令.

一个问题是我无法运行"cd"命令.我有我的PHP脚本设置,因此它可以运行由换行符分隔的一系列命令.所以我运行"cd ../"然后"pwd"但它仍然在我的Web应用程序的根目录中.我该如何解决?

php

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

fork和子/父进程

我正在为我的OS课程学习期中考试,并且正在研究这个代码示例.在我的系统(OS X Yosemite)上,我得到两个两个三,所以看起来子进程在父进程之前运行并输出,尽管缺少wait()函数.这是所有系统上的预期行为,还是可能是两个三倍,甚至是不同的东西?

#include <stdio.h>
#include <unistd.h>

int main()
{
  int rc;
  printf( "ONE\n" );
  rc = fork();
  printf( "TWO\n" );
  if ( rc == 0 ) { printf( "THREE\n" ); }
  if ( rc > 0 ) { printf( "FOUR\n" ); }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c fork

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

我的SQL代码出了什么问题?在第9行获得错误

我正在尝试将下面的代码导入MySQL数据库.但是它说我在第9行有一个涉及')'令牌的错误.知道怎么解决吗?错误信息是:

您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册,以便在第9行的')'附近使用正确的语法
.您的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第6行使用')'附近的正确语法
.您的SQL语法中有错误; 检查与您的MySQL服务器版本相对应的手册,以便在第10行附近的')'附近使用正确的语法

CREATE TABLE user_types (
    id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(64),
    description VARCHAR(255),
    rank INT UNSIGNED NOT NULL DEFAULT 1
);

CREATE TABLE users (
    id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(64),
    email VARCHAR(64) NOT NULL,
    password VARCHAR(255) NOT NULL,
    ip_address VARCHAR(255),
    user_agent VARCHAR(255),
    type INT UNSIGNED NOT NULL DEFAULT 1,
    first_name VARCHAR(64),
    last_name VARCHAR(64),
    biography TEXT,
    dob_month INT UNSIGNED,
    dob_year INT UNSIGNED,
    dob_day INT UNSIGNED,
    interests …
Run Code Online (Sandbox Code Playgroud)

sql

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

标签 统计

c ×5

c++ ×1

fork ×1

linux ×1

malloc ×1

memory-management ×1

php ×1

pipe ×1

sql ×1