如何在Windows(MSVC8和MSVC6)中将__int64转换为long?
正常的类型转换会有效吗?
另外,如何将long转换为__int64?如果long是负值,它会起作用吗?
注 - 我说的是__int64变量总是包含一个不超过32位长的值的场景.
包含指针算术,是否会自动转换为有符号变量的整数?如果是,为什么?
假设我这样做
int *pointer;
int *pointerdiff;
unsigned int uiVal = -1;
pointerdiff = pointer + uiVal // Pointer will contain valid address here.
Run Code Online (Sandbox Code Playgroud)
其中指针是指向int的指针,uiVal初始化为-1,然后我发现指针中的地址减少了4.为什么这里没有考虑无符号值-1?
是否有全局变量会增加可执行文件的大小?如果有,怎么样?它是仅增加数据部分大小还是增加文本部分大小?
如果我有一个全局变量和初始化如下:
char g_glbarr[1024] = {"jhgdasdghaKJSDGksgJKASDGHKDGAJKsdghkajdgaDGKAjdghaJKSDGHAjksdghJKDG"};
Run Code Online (Sandbox Code Playgroud)
现在,这是否将1024添加到数据部分,并将启动字符串的大小添加到文本部分?
如果相反,如果静态地为这个数组分配空间,如果我malloc它,然后做一个memcpy,只有数据部分大小会减少或文本部分大小也会减少?
我有以下与 OpenSSL Private OID 支持相关的问题:
如何提取给定数字中特定位组所代表的值,即如果位11,12和13是1,1,0则该值应为6.
做同样事情最有效的方法是什么?此外,它应该是通用的.我应该能够给出开始和结束位位置,并且应该能够提取起始位置和结束位置之间存在的位所代表的值.
例如:00000000 00000000 01100000 00011111
对于上面的数字,考虑到第0位来自右端,如果我给出这个数字,0作为起始位置,2作为结束位置,那么我应该得到值7.
另外,对于上述问题,我们如何处理字节序?
在函数中的局部范围内声明时,将所有相同类型的变量组合在一起是一种好的做法吗?如果是,为什么?它是否解决了内存对齐问题?
我已经编写了一个基于C的库,并且它可以并行地在多线程中工作,我在init函数中创建了一些全局互斥.
我希望在多线程中使用库API之前,在主线程中调用init函数.
但是,如果直接在多线程中调用init函数本身,那么这是一个问题.有没有办法保护我的库中的init函数本身?我能想到的一种方法是让应用程序创建一个互斥锁并保护对我的init函数的并行调用,但是我可以保护它免受我的库本身的影响吗?
当我的代码处于阻塞recv调用中时,如果另一方重新启动,那么这个侧面的recv调用无法了解它并且只是进入挂起状态.
怎么避免这个?
calloc和malloc之间有什么区别,后面跟着一个memset?如果我用malloc替换所有对calloc的调用,后跟memset,它会是一样吗?
如果是这种情况,那么为什么单独提供两个函数malloc&calloc?
有没有办法检查是否为小端或大端架构构建了库而不执行它的代码?
让我们说,我有一个库X,但是,我不知道它是否是为小端或大端构建的,是否有任何命令或有没有办法通过构建输出找出如果库已经构建对于小端或大端?或者是否可以将此信息放入库中?