草庐IT

c - Windows 共享内存段

我一直在用谷歌搜索这个问题,但未能找到明确的答案,所以我希望有人对WindowsVSLinux中的共享内存段有一些了解。在Linux中,有两种为IPC创建共享内存的方法:共享内存段(shmget等)和内存映射文件(mmap)。根据我的简要理解,mmap要求您在操作系统中的某处有一个实际文件来映射,而共享内存段只是内存中基于名称的段,可以由进程附加到该段上。在Windows中,似乎只有内存映射文件的等价物,您必须在某处float一个实际文件。我的问题:这实际上是Windows中唯一一种共享内存,还是它有一个用于创建非基于文件的共享内存段的API。 最佳答案

编译器忽略#define _GNU_SOURCE

我的母语不是英语,所以请原谅任何拼写或语法错误我不是编译专家,对构建及其错误也没有任何有用的经验我是C#程序员,主要在MS环境中工作我只知道3个“必须知道才能在Linux命令中生存”“./configure、make&makeinstall”来self的Linux小经验我的开发环境我使用的是Windows7工作站用Cygwin和MinGW(作为Linux的“替代品”)进行编译。问题我想在主要为Linux发行版编写的Windows上编译C源代码。/配置工作没有问题。如果我使用命令ma​​ke编译源代码,我会遇到以下错误:Errorgrib_keys.c:50:34:error:'alph

c - 读写互斥

我正在为关键部分使用互斥锁。我有一个设计约束,1)如果在2个不同的线程中发生2次读取,则临界区应该对两者都可用。2)如果发生写操作,那么应该阻塞其他线程的读操作3)如果发生读取,则应阻止在其他线程上写入。我不知道如何使用Createmutex、openmutex、waitforsingleobject和releasemutexapi执行此操作。 最佳答案 您正在寻找的是Reader-Writerlock.互联网上有一些实现,例如thisone. 关于c-读写互斥,我们在StackOver

c - _beginthread 和 WaitForSingleObject

我正在实现一个启动4个线程的程序。函数是:void*SOURCE_in(structSOURCE_1*);void*SOURCE_out(structSOURCE*);void*SINK_out(structSINK_1*);void*SINK_in(structSINK*);这些函数允许4个block之间进行通信。Block1与Block2通信。block2与第三block共享信息。Block3与Block4进行信息通信。我的问题在main.c中intmain(intargc,char**argv){externintp,e_source,e_sink_1,l_sink,l_sour

c - C编译程序使用哪些段?

我在OSDevwiki上读到,x86架构的保护模式允许您为代码和数据创建单独的段,而您不能写入代码段。Windows(是的,这是平台)将新代码加载到代码段中,并在数据段上创建数据。但是,如果是这种情况,程序如何知道它必须将段切换到数据段?因为如果我理解正确的话,所有地址指令都指向您运行代码的段,除非您切换描述符。但我也读到,如此收集的平面内存模型允许您在一个段内运行代码和数据。但我只是在与汇编程序相关的情况下才读到这篇文章。那么,请问,Windows上的C编译代码是怎么回事?谢谢。 最佳答案 解释中segment有两种含义:一个80

c# - 在 C# 中编码一个 char**

我正在与采用char**(即指向字符串的指针)的代码进行交互:intDoSomething(Whatever*handle,char**error);基本上,它需要一个状态句柄,如果出现问题,它会返回错误代码和可选的错误消息(内存是在外部分配的,并通过第二个函数释放。那部分我已经弄明白了:)).但是,我不确定如何在C#中处理in。我目前拥有的:[DllImport("mydll.dll",CallingConvention=CallingConvention.Cdecl)]privatestaticunsafeexternintDoSomething(IntPtrhandle,byte

java - 使用 SWIG 从 Java 访问结构中的指针数组

我有这样的东西:typedefstruct{char*content;}Boo;typedefstruct{Boo**data;intsize;}Foo;我想使用SWIG在Java中将Boo**数据转换为包含Boo元素(Boo[])的数组。然后读取数组(我不想从Java代码编辑、删除和创建新数组)。在SWIG文档中描述了如何使用carrays.i和array_functions执行此操作,但是结构的成员data必须是类型嘘*。我的问题有解决方案吗?编辑:时间仓促忘了写想用SWIG生成Java类配合C结构。 最佳答案 解决方法很简单。

java - 对于 Java 和 C 编译器,代码的行为有何不同?

我有这段代码,我在Java和C上运行了它,但它们给了我两个不同的结果。是什么让它们以不同的方式运行。x=10;y=10;z=10;y-=x--;z-=--x;x-=--x-x--;X的值在Java中的输出是:8,对于C,它是6。这两个编译器对于递增选项的行为有何不同? 最佳答案 当您说这段代码被视为C程序的输出是6时,您是错误的。作为C程序,这是undefined.您的编译器只是碰巧得到6,但您也可能得到24、段错误或编译时错误。参见C99standard,6.5.2:在前一个和下一个序列点之间,一个对象应该有它的存储值最多通过表达

java - C 中的#define 类似于Java 中的静态变量吗?

在C中我们可以这样写:#defineLOWER0在Java中我们可以这样写:staticintlower=0;这些语句不都是为了让其他方法使用变量lower吗? 最佳答案 它们完全不同。Define更像是C预处理器使用的复制粘贴。Static是Java类的属性修饰符。静态属性可以在运行时更改。 关于java-C中的#define类似于Java中的静态变量吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

c++ - 如何在C中写入特定地址的数据

这个问题在这里已经有了答案:Pointertoaspecificfixedaddress(1个回答)关闭9年前。我需要在0x8000000地址写0x00001234,用C可以吗?