Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. std::vector capacity inconsistencies
Forum Updated to NodeBB v4.3 + New Features

std::vector capacity inconsistencies

Scheduled Pinned Locked Moved Solved General and Desktop
3 Posts 2 Posters 410 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    KevLob
    wrote on last edited by KevLob
    #1

    Hello everyone,

    This is the first time I'm posting on this forum, so I hope I'll be clear enough and you can help me with this strange problem.

    I am using QT OpenGL on a Windows 10 64-bit to show pointcloud from a PLY file, that can have more than 8 million of points (each points contains the x, y, z coordinates, and the RGBA value). I can read the data from this type of file, and since I have to read more than one PLY file, I'm currently storing it in a vector of vector of float.

    The problem is that I have a bad_alloc error while reading the fourth file of 8 million points. To understand more what the problem really was, I have created a test project containing 28 line, in which I initialized a vector of float and I store the same float value in it.

    This is where the inconsistency is: on Windows 10, i can only initialized a vector of float with a max capacity of about 412 millions value, one more and I have a bad_alloc error. But after testing on Linux, I can push_back more than 1 billion floating value without any error whatsoever.

    My projects (the test one and the real one) are in release mode, and I am compiling with the c++14 configuration.

    Is there a restriction on Windows 10 that limit the number of data stored in a std::vector? If so, can I remove it, or at least raise it so that I can store more than 412 million floating value?

    Here's the .pro of the test project:

    QT += widgets core gui
    
    CONFIG += c++14
    
    QMAKE_CXXFLAGS -= -O2 -std=c++11 -std=gnu++11
    QMAKE_CXXFLAGS += -O2 -s -std=gnu++14
    QMAKE_LFLAGS -= -O1
    
    
    SOURCES += \
        main.cpp \
    

    And here's the main.cpp:

    #include <QtGui>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        Q_UNUSED(argc);
        Q_UNUSED(argv);
        vector<float> test(412174164);  //<-- Add one more and a bad_alloc error raise.
        qDebug() << "OK!";
        for(long long int i = 0; i < 1e8; ++i)
        {
            try
            {
                test[i] = 0.15753f;
            }
            catch (const std::bad_alloc&)
            {
                qDebug() << i;
                while(true)
                    1;
                return -1;
            }
        }
        qDebug() << "KO!";
    
    	return 0;
    }
    

    Thanks in advance for your help.

    JKSHJ 1 Reply Last reply
    0
    • K KevLob

      Hello everyone,

      This is the first time I'm posting on this forum, so I hope I'll be clear enough and you can help me with this strange problem.

      I am using QT OpenGL on a Windows 10 64-bit to show pointcloud from a PLY file, that can have more than 8 million of points (each points contains the x, y, z coordinates, and the RGBA value). I can read the data from this type of file, and since I have to read more than one PLY file, I'm currently storing it in a vector of vector of float.

      The problem is that I have a bad_alloc error while reading the fourth file of 8 million points. To understand more what the problem really was, I have created a test project containing 28 line, in which I initialized a vector of float and I store the same float value in it.

      This is where the inconsistency is: on Windows 10, i can only initialized a vector of float with a max capacity of about 412 millions value, one more and I have a bad_alloc error. But after testing on Linux, I can push_back more than 1 billion floating value without any error whatsoever.

      My projects (the test one and the real one) are in release mode, and I am compiling with the c++14 configuration.

      Is there a restriction on Windows 10 that limit the number of data stored in a std::vector? If so, can I remove it, or at least raise it so that I can store more than 412 million floating value?

      Here's the .pro of the test project:

      QT += widgets core gui
      
      CONFIG += c++14
      
      QMAKE_CXXFLAGS -= -O2 -std=c++11 -std=gnu++11
      QMAKE_CXXFLAGS += -O2 -s -std=gnu++14
      QMAKE_LFLAGS -= -O1
      
      
      SOURCES += \
          main.cpp \
      

      And here's the main.cpp:

      #include <QtGui>
      
      using namespace std;
      
      int main(int argc, char *argv[])
      {
          Q_UNUSED(argc);
          Q_UNUSED(argv);
          vector<float> test(412174164);  //<-- Add one more and a bad_alloc error raise.
          qDebug() << "OK!";
          for(long long int i = 0; i < 1e8; ++i)
          {
              try
              {
                  test[i] = 0.15753f;
              }
              catch (const std::bad_alloc&)
              {
                  qDebug() << i;
                  while(true)
                      1;
                  return -1;
              }
          }
          qDebug() << "KO!";
      
      	return 0;
      }
      

      Thanks in advance for your help.

      JKSHJ Offline
      JKSHJ Offline
      JKSH
      Moderators
      wrote on last edited by
      #2

      @KevLob said in std::vector capacity inconsistencies:

      I am using QT OpenGL on a Windows 10 64-bit

      Are you also building a 64-bit application? A 32-bit application in 64-bit Windows only has access to 2 GiB of RAM.

      vector<float> test(412174164);  //<-- Add one more and a bad_alloc error raise.
      

      This requires 1.5 GiB of contiguous memory. Do you have that amount of RAM available? Is your RAM fragmented?

      Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

      K 1 Reply Last reply
      4
      • JKSHJ JKSH

        @KevLob said in std::vector capacity inconsistencies:

        I am using QT OpenGL on a Windows 10 64-bit

        Are you also building a 64-bit application? A 32-bit application in 64-bit Windows only has access to 2 GiB of RAM.

        vector<float> test(412174164);  //<-- Add one more and a bad_alloc error raise.
        

        This requires 1.5 GiB of contiguous memory. Do you have that amount of RAM available? Is your RAM fragmented?

        K Offline
        K Offline
        KevLob
        wrote on last edited by
        #3

        @JKSH said in std::vector capacity inconsistencies:

        @KevLob said in std::vector capacity inconsistencies:

        I am using QT OpenGL on a Windows 10 64-bit

        Are you also building a 64-bit application? A 32-bit application in 64-bit Windows only has access to 2 GiB of RAM.

        Oh... I feel stupid now. I was using MinGW 32-bit to build the application. I have changed it to MinGW 64-bit and I can now store more than a billion value.

        Thank you.

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved