iOS Textures consome 33% de memória extra

Eu estava testando meu jogo iOS e notei uma discrepância entre a quantidade de memória que estava ocupando e a quantidade de memóriapensament deveria estar ocupando. Eventualmente, reduzi o problema a texturas que consomem 33% mais memória do que eu pensava que deveriam esta

Por exemplo, acho que uma textura de 32 bits descompactada de 256x256 deve levar 256 * 256 * 4 bytes = 256k. No entanto, eu observaria que a memória do aplicativo cresce em algo como 340k ao alocar uma textura de 256x256. Era como se o dispositivo estivesse alocando memória suficiente para armazenar a textura e todos os seus mipmaps, mas não estou usando mapas mip ou pedindo espaço de qualquer maneira.

Esta memória extra se destacou, porque só aconteceria em determinados dispositivos. Percebi a memória extra ao testar o jogo em um iPod Touch 4. No entanto, o problema não ocorreu no iPhone 3GS, iPod 3G ou iPad 1.

s versões do SO nos dispositivos são:

iPod 3G - iOS 3.1.2 (7D11) iPhone 3GS - iOS 4.3.5 (8L1) iPod 4 - iOS 4.2.1 (8C148) iPad - iOS 4.3 (8F190)

EDITA

Aqui está um pouco mais de informação. Meço a memória do aplicativo assim

int PlatformIOS::GetProcessMemUsage()
{
    task_basic_info info;
    mach_msg_type_number_t size = sizeof( info );
    kern_return_t kerr = task_info( mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size );
    if ( kerr == KERN_SUCCESS ) 
        return info.resident_size;

    return 0;
}

Isto retorna o mesmo valor que você verá no programa Insturments para o Real Mem. Na verdade, é muito úti

E aqui está como eu aloco minhas texturas:

bool GL3DTextureDataPiece::CreateTextureSurface(X3DInterfaceImpl *theInterface, int theWidth, int theHeight, PixelFormat theFormat, RefCount *thePalette, bool generateMipMap)
{
    glGenTextures(1,&mTexture);
    theInterface->SetCurTexture(this);

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,mLinearFilter?GL_LINEAR:GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,mLinearFilter?GL_LINEAR:GL_NEAREST);

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, theWidth, theHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

    return true;
}

É tudo muito básico. A única coisa que me levou a encontrar os problemas de memória em primeiro lugar foi a discrepância entre diferentes dispositivos. De fato, foi a discrepância entre a memória total do aplicativo e a memória de recursos (eu mesmo rastreio imagens e a memória sonora) que me levou a investigar para encontrar esse bu

questionAnswers(4)

yourAnswerToTheQuestion