㈠ Redhat linux中怎樣自動設置線程堆棧大小
不是可以直接用線程屬性進行設置嗎?
我寫了一個小程序。如下:
#include <pthread.h>
#include <limits.h>#define Thread_NUM 5void *MultiThread_soap_serve(){ sleep(5); printf("new pthread!!\n");}//PTHREAD_STACK_MIN 經過計算是16K。//64*16K = 1M,線程堆棧應該是夠用的。#define MICHAEL_SET_PTHREAD_STACK_SIZE 64int main(){ pthread_attr_t attr; pthread_attr_init(&attr); size_t stacksize = MICHAEL_SET_PTHREAD_STACK_SIZE*PTHREAD_STACK_MIN; //stacksize =PTHREAD_STACK_MIN; //stackaddr=(void*)malloc((N+1)*PTHREAD_STACK_MIN); //pthread_attr_getstack(&attr,&statckattr,&stacksize); //pthread_attr_setstack(&attr,stackaddr,); pthread_attr_setstacksize(&attr,stacksize); int iThreadNum = 0; pthread_t PSoapThread[Thread_NUM]; for ( ; iThreadNum < Thread_NUM ; iThreadNum++ ) { pthread_create(&PSoapThread[iThreadNum],&attr,MultiThread_soap_serve,(void *)NULL); } pthread_attr_destroy(&attr); while(1) { sleep(10); printf("main!!\n"); }}
㈡ linux下,gcc提示「段錯誤 (核心已轉儲)」,ubuntu剛上手不大會用,誰說一下是啥問題
主要有以下幾個方面的原因:
一、內存訪問出錯
這類問題的典型代表就是數組越界。
二、非法內存訪問
出現這類問題主要是程序試圖訪問內核段內存而產生的錯誤。
三、棧溢出
Linux默認給一個進程分配的棧空間大小為8M。c++申請變數時,new操作申請的變數在堆中,其他變數一般在存儲在棧中。
因此如果數組開的過大變會出現這種問題。
注意事項
段錯誤一般就是指訪問的內存超出了系統所給這個程序的內存空間,通常這個值是由gdtr來保存的,他是一個48位的寄存器,其中的32位是保存由它指向的gdt表,後13位保存相應於gdt的下標,最後3位包括了程序是否在內存中以及程序的在cpu中的運行級別,指向的gdt是由以64位為一個單位的表,在這張表中就保存著程序運行的代碼段以及數據段的起始地址以及與此相應的段限和頁面交換還有程序運行級別還有內存粒度等等的信息。
一旦一個程序發生了越界訪問,cpu就會產生相應的異常保護,於是segmentation fault就出現了。在編程中基本是是錯誤地使用指針引起的。
㈢ runtime error是什麼原因引起的
runtime error原因及解決方案:
屬於運行時錯誤,當程序運行到一半,程序發生崩潰。
1、數組過小。
2、除數為零。
3、大數組定義在函數內。
4、指針越界。
5、還有可能是程序拋出了未接收的異常。
原因:
數組過小,導致程序訪問到數組外的內存區域。
解決方案:
適當增大數組容量。
原因:
除數為零,發生除零錯誤。
解決方案:
若可能存在除數為零,需對除數數值進行判斷。
原因:
大數組定義在函數內,導致程序棧區耗盡。
解決方案:
1、將大數組定義在函數體外,使用程序堆空間。
在Windows下,棧的大小是2MB。歲爛而申請堆空間的大小一般小於2GB,由於程序棧乎運漏區空間遠小於堆區空間,因此將大數組定義在函數外,不易導致程序堆區耗盡。
2、更改棧大小。
link(鏈接)時用/STACK指定它的大小,或者在.def中使用STACKSIZE指定它的大小。
使用控制台命令「EDITBIN」更改exe的棧空間大小。
Linux默認棧空間的大小為8MB,通過命令ulimit -s來設置。悄裂
㈣ JVM線程的棧在64位Linux操作系統上的默認大小是多少
不顯式設置-Xss或-XX:ThreadStackSize時,在Linux x64上ThreadStackSize的默認值就是1024KB,給Java線程創建棧會用這個參數指定的大小。這是前一塊代碼的意思。
如果把-Xss或者-XX:ThreadStackSize設為0,就是使用「系統默認值」。而在Linux x64上HotSpot VM給Java棧定義的「系統默認」大小也是1MB。
所以這個條件下普通Java線程的默認棧大小怎樣都是1MB。
㈤ linux 線程默認棧多大
linux的線改者薯程棧大小可以使用ulimit -s查看,對於核者ubuntu 2.6的內核線程棧的默認大嫌爛小為8M
㈥ linux系統最大堆棧內存
linux系統最大堆棧消搜內存是-Xmx512m。根據查找相關公開資料顯敏簡示,linux系統堆棧大小拿拿歷的配置啟動參數,初始堆大小-Xms32m最大堆大小-Xmx512m。
㈦ linux 設置堆棧大小 為無限制
你好。
執行命令ulimit -a,查看棧大小的限制。
通過使用 ulimit -s 數字 進行設置。