V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SS945
V2EX  ›  C

Linux 上 C 的程序遇到个异常退出问题,局部变量大小有限制??

  •  
  •   SS945 · 111 天前 · 1458 次点击
    这是一个创建于 111 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <signal.h>
    #include <sys/prctl.h>
    #include <string.h>
    #include <pthread.h>
    #include <liblx_api/lx_api.h>


    static void *client_check(void *arg)
    {
    printf("###### %s %d ######\n", __FUNCTION__, __LINE__);
    #define SZ_BUF 32768 /* 32*1024 */
    char post_data[SZ_BUF] = {0};
    char enc_msg[SZ_BUF + 16] = {0};
    unsigned char cipher_data[SZ_BUF] = {0};
    unsigned char cipher_str[SZ_BUF] = {0};
    unsigned char test[SZ_BUF] = {0};
    strcpy((char *)cipher_data, "AAAAAAAAAAAAAAAAA");
    strcpy((char *)cipher_str, "CCCCCCCCCCCCCCC");
    strcpy((char *)enc_msg, "DDDDDDDDDDDDDDDD");
    strcpy((char *)post_data, "EEEEEEEEEEEEEEE");
    strcpy((char *)test, "FFFFFFFFFFFFFFFFF");
    printf("###### %s %d ######\n", __FUNCTION__, __LINE__);

    return 0;
    }


    int main(void)
    {
    pthread_t tidp;
    printf("\n######## start #####\n");
    test_service(); //工作正常
    if (pthread_create(&tidp, NULL, client_check, NULL) != 0) //异常退出
    {
    LX_NGX_ERR("pthread_create error!\n");
    }

    printf("AAAAAAA hello world!!!\n");
    return 0;
    }


    上面的程序如果正常在 main 里面跑就是好的,但一放到 pthread_create 里面用线程跑就不行,放在 x86 上就可以,但放在我的板子里板就不行,这是什么鬼????
    7 条回复    2024-08-06 16:43:23 +08:00
    rickc137
        1
    rickc137  
       111 天前
    可能超线程资源限制了吧,用 gdb 能调试吗
    SS945
        2
    SS945  
    OP
       111 天前
    @rickc137 目标板上没有 gdb ,头痛。
    sagaxu
        3
    sagaxu  
       111 天前
    获取一下线程栈的大小看看有没有差别
    xiaozhaoz
        4
    xiaozhaoz  
       111 天前   ❤️ 2
    pthread_init_attr()
    pthread_attr_getstack()
    看默认栈大小。

    不同的 libc 实现,线程栈大小不同,glibc 默认 2M 。
    ulimit -s 也会限制栈大小。

    可以统一通过 pthread_create 第二个参数设置栈大小。
    SS945
        5
    SS945  
    OP
       111 天前
    @xiaozhaoz 确实。。。这板子只有 128K 。。。谢谢
    sujin190
        6
    sujin190  
       111 天前
    都这么大内存了不堆上分配很容易遇到不可预测问题吧
    proxytoworld
        7
    proxytoworld  
       111 天前
    32m 为什么不堆分配
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2566 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:47 · PVG 23:47 · LAX 07:47 · JFK 10:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.