回答了问题2014-08-03
我觉得,查询函数根据结果动态申请内存,然后将申请内存的指针和查询结果的长度返回。然后调用者记得在不需要的时候把查询结果的内存释放掉就好了。
回答了问题2014-06-06
就x86来说,最主要的用户程序可以控制的通用寄存器并不多,其中最重要的是 eip, esp 分別对应是用户程序的第一条指令和用户程序的堆栈地址,这2个寄存器的os会在载入用户程序的时候根据elf文件的格式设置好。当用户程序运行的时候,其他的通用寄存器eax,ebx,ecx,...
回答了问题2014-05-31
brew安装gcc,设置环境变量CC为gcc试试。brew有多个gcc的版本可以选择,4.8,4.7,选择一个好了,如果还出错,继续贴log吧
回答了问题2014-05-29
versatile是qemu支持的一个arm开发版的型号,linux的内核需要根据不同的开发版,arm处理器的型号进行编译,才能在qemu所支持的开发版上运行。如果你在x86平台上的话,需要配置内核做交叉编译才能产生在arm的linux内核,不知道你用的是那个config文件。
回答了问题2014-05-29
系统调用一般都需要保存用户程序得上下文(context), 在进入内核得时候需要保存用户态得寄存器,在内核态返回用户态得时候会恢复这些寄存器得内容。这是一个开销的地方。 如果需要在不同用户程序间切换的话,那么还要更新cr3寄存器,这样会更换每个程序的虚拟内存到物...
回答了问题2014-05-19
因为主线程和你新开的线程运行的顺序并不是确定的,当新的线程要输出的时候,你的main线程可能已经退出了。由于你setDaemon(true) Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running ar...
赞了回答2014-05-15
参数 o 是 o1 所引用的对象的引用 o = {} 是 改变了 o 的引用, o1 和它引用的对象都不受影响
回答了问题2014-05-14
有个叫wicd的,有wicd-curses可以在命令行下用。
回答了问题2014-05-14
楼主需要的是进程(process)之间共共享内存,那么这个时候pthread无法帮忙,因为pthread是线程(thread)级别的锁。 进程之间共享内存一般通过memory mapped file来进行,参见mmap函数。如果需要枷锁操作,可以根据情况选用文件锁 fcntl,或者信号量(Semaphores) semget...
回答了问题2014-05-13
c++11是目前最新的c++标准,上一个版本是c++03。不同的标准版本支持的语言特性不同,标准库里面所提供类和函数也不同。如果你用到c++11标准的新功能和标准库提供的功能,就需要选择这个支持的选项。
回答了问题2014-05-08
参见 [链接]
回答了问题2014-05-03
还有一个作用,有些时候一个头文件会被其他头文件包含,比如 types.h 被header_a.h 和header_b.h包含,然后一个C文件同时包含header_a.h和header_b.h的时候,如果没有#ifdef/#define/#endif,那么types.h就会被包含两次,这样在types.h中typedef unsigned int uint3...
回答了问题2014-05-03
A_type A_array[1024]; int Count; 在头文件中,分别被2个c文件包括,这样相当于在2个c文件中定义了2次,这样在最后把这2个c文件生成的obj文件链接到一个可执行文件的时候,会导致有重复的定义。一般的做法是把变量的定义放到一个c文件中去,如果其他的c文件需要访问...
回答了问题2014-05-03
performance counter 可以用来记录cpu中发生一些事件的次数,比如已经执行过多少条指令,有多少l1 cache miss,已经发生了多少次中断,有多少次分支预测错误之类的信息。不同的体系结构和微架构支持的事件是不同的,需要去读手册来看支持那些事件。
回答了问题2014-05-03
virtualbox需要一些内核模块的支持,在升级内核以后,老的内核模块也许和新的内核版本不匹配,virtualbox提示让你用上面的命令重新编译一下匹配的内核模块。
回答了问题2014-05-02
所给出的答案中直接将第2个字符串的内容写到第一个字符串的后面,可能会导致覆盖其他数据,也可能会导致内存访问越界。一般都是先要根据整个2个字符串的长度malloc一块新的内存,然后再将字符串1和2分别strncpy到这块新分配的内存上去,得到拼接的字符串。
回答了问题2014-05-01
大体来讲,一个可执行程序包括代码段和数据段。 代码段包含的就是可执行的代码,cpu指令,数据段又可以细分只读已初始数据和读写已初始数据,这2中数据都是包含在可执行文件中的,至于为初始数据,一般可执行文件只记录其大小,然后当程序被载入的时候分配相应的内存...
回答了问题2014-05-01
就x86-64系统来说,cpu是可以按照字节寻址的。 int *在64位系统上是64-bit是由于x86-64的cpu的虚拟内存寻址空间是64位,这样一个指针也需要是64位才可以容纳下一个虚拟内存的地址。int 是数据类型,表明这个数据占用32个bits的内存空间,如果你想要访问某个在内存中...
回答了问题2014-05-01
假设add_ht传入的参数d已经被初始化,指向已经分配的内存空间,这个时候ht->table是一个指向指针的指针,初始化时候的值为0. ht->table = dict_entry这个语句行dict_entry指针的值付给ht->table, 虽然类型不匹配,一个是指针,一个是指向指针的指针,但是由...
回答了问题2014-05-01
你应该会用java ide写程序?一般ide都有可以设置使用那个jdk的选项。