小编jbu*_*jbu的帖子

如何在低内存条件下在C++中正确分配内存

我已经看到资源显示了两种分配内存的方法,同时确保有足够的内存来完成操作.

1)在try/catch中包装'new'操作,因为它将返回std :: bad_alloc(?)

try { ptr = new unsigned char[num_bytes]; } catch(...) {}
Run Code Online (Sandbox Code Playgroud)

2)在'new'操作后检查指定的指针是否为null.

ptr = new unsigned char[num_bytes]; if(ptr == NULL) { ... }
Run Code Online (Sandbox Code Playgroud)

哪一个是对的?他们都工作吗?我是否需要同时做1和2?

谢谢,

JBU

c++ memory allocation exception

12
推荐指数
2
解决办法
521
查看次数

java匿名类和同步和"这个"

我相信,我正在处理JAVA GUI中的竞争条件.

我有一些方法在匿名类中创建一个"匿名方法",如下所示:

synchronized foo()
{
     someMethod(new TimerTask()
     {
          public synchronized run()
          {

               //stuff

          }
     };
}
Run Code Online (Sandbox Code Playgroud)

问题:在TimerTask对象或foo所在的类上是否同步了run方法?

问题2:如果我在run()声明中删除了"synchronized",而在run()体内有一个synchronized(this){}块,那么"this"会引用TimerTask对象或者对象是包含foo()的方法的实例?

请帮帮我.

谢谢,jbu

java synchronization anonymous class this

11
推荐指数
1
解决办法
5227
查看次数

编写流协议:消息大小字段或消息分隔符?

我即将编写一个通过TCP流的消息协议.接收方需要知道消息边界的位置.

我可以发送1)固定长度的消息,2)大小字段,以便接收者知道消息有多大,或3)唯一的消息终止符(我猜这不能在消息中的任何其他地方使用).

出于效率原因,我不会使用#1.

我喜欢#2,但是流可能会失去同步吗?

我不喜欢#3的想法,因为它意味着接收者不能提前知道消息的大小,并且还要求终结符不会出现在消息的其他地方.

对于#2,如果可能不同步,我可以添加终结符,或者我保证永远不会失去同步,只要发送方程序正确无误即可!是否有必要做#2 #3?

请告诉我.

谢谢,jbu

message protocols stream delimiter terminator

11
推荐指数
2
解决办法
4806
查看次数

java位操作

byte x = -1;
for(int i = 0; i < 8; i++)
{
    x = (byte) (x >>> 1);
    System.out.println("X: " + x);
}
Run Code Online (Sandbox Code Playgroud)

据我了解,java将数据存储在二进制补码中,意思是-1 = 11111111(根据维基百科).

此外,从java文档:"位模式由左侧操作数给出,以及由右侧操作数移位的位置数.无符号右移位运算符">>>"将零移至最左侧位置,而">>"后面的最左边位置取决于符号扩展."

这意味着>>>每次都会将0移到最左边的位.所以我期待这段代码

迭代:x的位表示

0:11111111

1:01111111

2:00111111

3:00011111

......等等

但是,我的输出总是X:-1,这意味着(我猜)>>>将符号位放在最左边的位置.所以我然后尝试>>,同样的结果.

这是怎么回事?我希望我的输出为:X:-1,x:127,x:63等.

java byte bit-manipulation

10
推荐指数
2
解决办法
2万
查看次数

关于迭代器顺序的c ++ std :: map问题

我是一个尝试使用地图的C++新手,所以我可以获得find()方法的恒定时间查找.

问题是,当我使用迭代器遍历地图中的元素时,元素的显示顺序与它们放置在地图中的顺序不同.

如果不维护另一个数据结构,是否有一种方法可以实现按顺序迭代,同时仍然保持恒定的时间查找能力?

请告诉我.

谢谢,jbu

编辑:感谢让我知道map :: find()不是常数时间.

c++ iterator map

9
推荐指数
3
解决办法
1万
查看次数

C++,命令行args没有被正确解析

我有一个程序:

int _tmain(int argc, char* argv[])
{
   std::cout << "STARTING" << std::endl;
   std::cout << "Num inputs: " << argc << std::endl;

   for(int i = 0; i < argc; i++)
      std::cout << argv[i] << std::endl;
Run Code Online (Sandbox Code Playgroud)

我希望打印出所有命令行参数.但是,输出是这样的:

./Test.exe你好世界

START Num输入:3.HW

它似乎只是查看每个参数中的第一个字符,而不是整个字符*直到终止字符.

有人有什么想法?

附加说明:通过VS2008创建它,我本质上是在互联网上复制和粘贴一个应该工作的例子.我用bash,powershell和cmd运行程序.

c++ parsing command-line-arguments

9
推荐指数
3
解决办法
1799
查看次数

试图将java对象存储在连续的内存中

我正在尝试实现类似缓存的对象集合.目的是通过内存中的位置快速访问这些对象,因为我可能一次只能读取多个对象.我目前只是将对象存储在像vector或deque这样的java集合对象中.但我不相信这会利用连续的记忆.

我知道这可以在C中完成,但可以用Java完成吗?这些对象可能具有不同的长度(因为它们可能包含字符串).有没有办法通过Java分配连续的内存?是否有Java集合对象?

请告诉我.

谢谢,jbu

java memory caching object

8
推荐指数
2
解决办法
4620
查看次数

适当的单元测试:测试没有[可访问]状态或返回值的方法

我对单元测试有些新意.关于正确测试的一件事(现在)让我感到困惑.

例如,如果主方法没有状态且只有控制台输出,那么如何测试它?像这样,myServer方法和状态是私有的吗?

 public static void main(String[] args)
 {
     Server myServer = new Server()
     if(myServer.start())
          System.out.println("started");
     else
          System.out.println("failed"); 
 }
Run Code Online (Sandbox Code Playgroud)

我不想更改我的代码并公开我的服务器方法和状态以使它们公开.

注意,我不是问如何测试myServer.start(),我问的是如何测试main()本身.

请告诉我.

谢谢你们,jbu

unit-testing

7
推荐指数
2
解决办法
4036
查看次数

在Java中,让对象的成员公开可用是不是一个坏主意?

我的应用程序中有一个数据类.我的应用程序永远不会被用作公共API,我将是唯一一个在我的项目中开发代码的人.

我试图保存每一盎司的处理器和内存电源.

在我的数据类中使我的数据成员具有公共/受保护/默认保护是不是一个坏主意,这样我就不必使用getter了?使用getter需要更多的内存和堆栈的创建......我相信这是不必要的.我在使用getter时可以看到的唯一原因是保护/隐私,但如果我是唯一的编码器而没有其他人会使用我的API,那么不使用getter是一个坏主意吗?

如果这是愚蠢的,请告诉我.

java encapsulation field private public

7
推荐指数
4
解决办法
1110
查看次数

解释Java反射性能:为什么它的速度非常快?

我已经看到其他线程说java反射性能比使用非反射调用慢10-100倍.

我在1.6中的测试表明情况并非如此,但我发现了一些其他有趣的东西,我需要有人向我解释.

我有实现我的界面的对象.我做了三件事1)使用对象的引用我将该对象转换为接口并通过接口调用方法2)使用对实际对象的引用直接调用方法,3)通过反射调用方法.我看到#1接口调用最快,紧接着是#3反射,但我注意到直接方法调用是最慢的一个很好的边缘.

我不明白,我会期望直接调用最快,然后接口,然后反射会慢得多.

Blah和ComplexClass与主类位于不同的包中,并且都有一个doSomething(int x)方法,它实现了接口并只打印整数x.

下面是我的结果(以毫秒时间,导致非常相似的W /多次试验):直接调用的方法:107194直接从对象铸造调用方法到接口:89594通过反射调用一个方法:90453

这是我的代码:

public class Main
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        Blah x = new Blah();
        ComplexClass cc = new ComplexClass();
        test((Object) x, cc);
    }

    public static void test(Object x, ComplexClass cc)
    {
        long start, end;
        long time1, time2, time3 = 0;
        int numToDo = 1000000;
        MyInterface interfaceClass = (MyInterface) x;

        //warming up the cache
        for (int i = 0; i < numToDo; …
Run Code Online (Sandbox Code Playgroud)

java reflection performance interface

7
推荐指数
1
解决办法
6819
查看次数