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.

沒有留言: