加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 是否可以通过makefile设置环境变量?

发布时间:2020-12-16 09:58:10 所属栏目:百科 来源:网络整理
导读:我想利用可以改变内存分配参数的MALLOC_PERTURB_环境变量(man 3 mallopt).但是,我想在应用程序级别而不是整个系统级别上控制分配参数.理想情况下,如果我可以通过项目的makefile控制它们.我试图通过makefile更改提到的变量,但没有成功. 为了测试,我创建了这个
我想利用可以改变内存分配参数的MALLOC_PERTURB_环境变量(man 3 mallopt).但是,我想在应用程序级别而不是整个系统级别上控制分配参数.理想情况下,如果我可以通过项目的makefile控制它们.我试图通过makefile更改提到的变量,但没有成功.

为了测试,我创建了这个test.c文件:

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

#define N 50

int main()
{
    char *chars;
    int i;

    if (NULL == (chars = malloc(N * sizeof(*chars))))
        return EXIT_FAILURE;

    free(chars);

    for (i = 0; i < N; ++i)
        printf("%c",chars[i]);
    printf("n");

    return EXIT_SUCCESS;
}

是的,我知道我正在阅读释放的内存,但这是使用MALLOC_PERTURB_的重点.

预期结果:值为MALLOC_PERTURB_的50个字符的ASCII字符.

足够近:

$export MALLOC_PERTURB_=97
$gcc test.c -o test
$./test
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa??


$export MALLOC_PERTURB_=105
$gcc test.c -o test
$./test
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii??

然后我试图将编译包含在makefile中,但没有成功.

导出变量(as proposed here)

Makefile文件

all:
    export MALLOC_PERTURB_=110
    gcc test.c -o test

结果(我期待110的’n’字母)

$export MALLOC_PERTURB_=105
$make
export MALLOC_PERTURB_=110
gcc test.c -o test 
$./test
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii??

递归调用(as proposed here)

Makefile文件

all:
    MALLOC_PERTURB_=110
    $(MAKE) rec

rec:
    gcc test.c -o test

结果(我期待110的’n’字母)

$export MALLOC_PERTURB_=105
$make
MALLOC_PERTURB_=110
make rec
make[1]: Entering directory '~/test'
gcc test.c -o test
make[1]: Leaving directory '~/test'
$./test
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii??

我试图从包含MALLOC_PERTURB_的github的makefile中找到任何灵感,但它们太复杂了我无法理解.
一些例子:(1),(2),(3)

一些技术信息:

Linux 4.0.1-1-ARCH x86_64
gcc version 4.9.2 20150304 (prerelease) (GCC)
GNU Make 4.1

解决方法

Browning,在makefile中设置环境变量很容易,而且你已经这样做了,但这不是你想要的.这使得它在编译期间获取该值.但是你希望它在你运行程序时改变malloc的行为.

阅读您引用的手册页确认您需要在运行程序的环境中设置环境变量.另外,已经提到过,设置环境变量的makefile只对测试程序这样做,它们实际上是作为构建的一部分运行的.

你不想在makefile中使用它.您希望在实际运行程序时设置它,这是其他注释和答案告诉您如何操作.很抱歉接受了答案,但我需要更多的空间来清除它,而且这是答案,对你而言.你已经知道怎么做了.你完全不知道它到底是什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读