我想分配并初始化一大块连续的内存(~1GB),然后将其标记为只读并分叉多个(比如几十个)将使用它的子进程,而不制作自己的内存副本(机器没有足够的内存().
我是否正确地认为如果我malloc像往常一样将内存标记为只读mprotect(addr, size, PROT_READ),然后fork,这将允许子进程安全地使用内存而不会导致它被复制?(假设我确保在mprotect调用后没有尝试写入分配的内存).
编辑:感谢您的所有答案.
一个后续问题 - 我正在计划使用shmget,但我认为它已经使用mm,因此仅限于较小的分配(请参阅本页的" 限制"部分).例如/proc/sys/kernel/shmmax,服务器上的32MB我正在使用这个.但我想要1GB的连续内存.我错了这个限制吗?
我是位操作技巧的新手,我写了一个简单的代码来查看在单个数字上进行单个位移的输出. 2
#include <iostream>
int main(int argc, char *argv[])
{
int num=2;
do
{
std::cout<<num<<std::endl;
num=num<<1;//Left shift by 1 bit.
} while (num!=0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下.
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
-2147483648
Run Code Online (Sandbox Code Playgroud)
显然,连续比特移位到左边由1个比特,将导致零,因为它已经在上面进行,但为什么计算机输出一个负数在最后终止在循环之前(自NUM接通零)??
然而,当我替换时int num=2,unsigned int num=2我获得相同的输出,除了最后一个数字是这个时间显示为正,2147483648而不是-2147483648
我gcc在Ubuntu Linux上使用编译器
我必须将网站名称修改为sql中的".com"或"co.in"
示例:假设我的站点地址为"http://stackoverflow.com/questions/ask?title=trim".我需要将结果作为"stackoverflow.com".
在某种情况下它可能像"www.google.co.in"然后我需要它是"google.co.in"
我正在寻找一种在我的网站上公开Google搜索功能的方法,以便Chrome用户可以使用上下文相关搜索(例如:)
Chrome搜索http://img19.imageshack.us/img19/7762/chromesearch.png
我知道YouTube归谷歌所有,但我不记得以前我看过这个功能的第三方网站.无论如何,我在google-labs或code.google.com上找不到任何引用,所以我转向你了.
如果有人对如何公开这个或参考文档有任何见解,我将非常感激.
#include <stdio.h>
#include <string.h>
int main() {
char *slogan = "together{kaliya} [namak]";
char *slow_gun = strdup(slogan);
char *token = strsep(&slow_gun, "{");
printf ("\n slow_gun: %s\n token: %s\n", slow_gun, token);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我执行它时:
$ cc -o try try_strsep.c
$ ./try
slow_gun: kaliya} [namak]
token: together
Run Code Online (Sandbox Code Playgroud)
但是,当我将char*口号改为:
char *slogan = "kalia} [namak]";
Run Code Online (Sandbox Code Playgroud)
并执行相同的程序:
$ vi try_strsep.c
$ cc -o try try_strsep.c
$ ./try
slow_gun: (null)
token: kalia} [namak]
Run Code Online (Sandbox Code Playgroud)
我的问题是,所以当我使用strsep()并且输入字符串没有我正在寻找的模式时,返回strsep()是错误的.我可以验证strsep()是否找不到模式的唯一方法是检查if (slow_gun == NUll).
如果我有char *slogan …
我在哪里可以下载 stdlib.h 的最新或标准库的源代码?我想看看这些功能是如何实现的,比如atoi、strtol等?
#include <iostream>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main ()
{
using qi::string;
std::string input("a");
std::string::iterator strbegin = input.begin();
std::string p;
bool ok = qi::phrase_parse(strbegin, input.end(),
((string("a") >> string("a")) | string("a")),
qi::space,
p);
if (ok && strbegin == input.end()) {
std::cout << p << std::endl;
std::cout << p.size() << std::endl;
} else {
std::cout << "fail" << std::endl;
std::cout << std::string(strbegin, input.end()) << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
该计划输出aa.这怎么可能?输入字符串是a.解析器应匹配aa或a.我写的string("a")只是测试运营商.
使用时char_ …
如何阻止Netbeans自动处理svn ignore" .swp"文件?
我使用Netbeans作为我的主要开发环境,但我经常同时使用gvim进行快速编辑.gvim使用.swp扩展名创建临时文件,Netbeans似乎正在扫描我的代码文件夹并svn ignore为这些文件添加属性.
我可以看到这对人们有用,但我想禁用它 - 无论如何,.swp文件都没有显示为无版本,因此它们不是问题,而是由于svn ignore只是由于当我使用svn命令行界面时,会产生一大堆修改垃圾邮件.
知道如何禁用此功能吗?
我在Linux上使用Netbeans(Ubuntu 9.04)来构建一个C项目.
如何传入一个环境变量,以便它对Makefile可见?
如果我执行正常操作export MYVAR="xyz"然后从命令行运行make,这当然可以正常工作.
但是Netbeans似乎没有使用.bashrc环境,所以如果我点击Netbeans中的"build",make就会失败.
有趣的是,似乎问题不MacOSX上发生-我已经添加了变量~/.MacOSX/environment.plist,并且该值是可见的Netbeans的.
我发现这篇帖子建议修改~/netbeans-6.8/etc/netbeans.conf.我试过这个,通过添加-J-DMYVAR=xyz到结尾netbeans_default_options,即:
netbeans_default_options="-J-client -J-Xverify:none -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=200m -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true -J-DMYVAR=xyz"
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
c ×5
c++ ×2
linux ×2
netbeans ×2
bit-shift ×1
boost ×1
boost-spirit ×1
makefile ×1
netbeans6.7 ×1
open-source ×1
opensearch ×1
parsing ×1
php ×1
search ×1
sql ×1
sql-server ×1
string ×1
strsep ×1
svn ×1
tokenize ×1
ubuntu ×1
web ×1