2016年3月29日 星期二

SystemC stack_protect assertion!

virtual void sc_core::sc_cor_qt::stack_protect(bool): Assertion `ret == 0' failed.

當你遇到這個錯誤時, 代表可能是你的vm.max_map_count太小了.
在systemc裏的這個QuickThread裏面會用到mprotect, 主要功能是切換stack的保護開關, 但這個保護在每個process有數量上的限制. Linux Ubuntu裏的預設值/proc/sys/vm/max_map_count為66530
你可以下這個命令試看看: sudo sysctl -w vm.max_map_count=131060

vm.max_map_count在Understand Linux Kernel一書中解釋為
The map_count field of the memory descriptor contains the number of regions owned by the process.
By default, a process may own up to 65536 different memory regions; however, the system administrator may change this limit by writing in the /proc/sys/vm/max_map_count file.

沒有留言:

一個小故事讓我們明白資金流通的意義

“又是炎熱小鎮慵懶的一天。太陽高掛,街道無人,每個人都債台高築,靠信用度日。這時,從外地來了一位有錢的旅客,他進了一家旅館,拿出一張1000 元鈔票放在櫃檯,說想先看看房間,挑一間合適的過夜,就在此人上樓的時候---- 店主抓了這張1000 元鈔,跑到隔壁屠戶那裡支付了他欠的肉錢...